jQuery 编程风格?

标签 jquery coding-style replace identity

我最近被要求修复一个我以前从未参与过的网站上的某些内容。我并没有真正使用 jQuery 那么多,但我想我应该看一下,看看是否可以修复它。

我已经设法解决了大部分问题,但我仍然对他们选择构建此网站的方式感到震惊。

在文档加载时,它们用相同的大量函数替换每个 anchor 标记和表单元素的 click() 方法。单击时,该函数会检查标签是否具有几个不同属性(甚至是非标准属性)之一,并根据存在的属性及其值执行各种不同的任务。

某些超链接有一个名为“ajaxrel”的属性,这使得 click() 函数查找另一个具有由 ajaxrel 属性指定的 ID 的(隐藏)超链接,然后调用该其他超链接的 click() 函数(这也被同一个 click() 函数修改)。

在服务器端,所有的 php 文件都相当长并且完全没有缩进。

整个网站的调试简直就是一场噩梦。这是标准的 jQuery 实践吗?这个导航方案看起来很糟糕。还有其他人实际上以这种方式使用 jQuery 吗?我想开始将它合并到我的项目中,但是查看这个网站让我非常头疼。

这是超链接的 click() 函数:

function ajaxBoxA(theElement, urltosend, ajaxbox, dialogbox) {

if ($(theElement).attr("href") != undefined)
      var urltosend = $(theElement).attr("href");
if ($(theElement).attr('toajaxbox') != undefined)
      var ajaxbox = $(theElement).attr('toajaxbox');

// check to see if dialog box is called for.
if ($(theElement).attr('dialogbox') != undefined)
      var dialogbox = $(theElement).attr('dialogbox');

var dodialog = 0;
if (dialogbox != undefined) {
    // if dialogbox doesn't exist, then flag to create dialog box.
    var isDiaOpen = $('[ajaxbox="' + ajaxbox + '"]').parent().parent().is(".ui-dialog-container");
    dodialog = 1;
    if (isDiaOpen) {
        dodialog = 0;
    }
    dialogbox = parseUri(dialogbox);
    dialogoptions = { close: function () { 
//          $("[id^=hierarchy]",this).NestedSortableDestroy();
        $(this).dialog('destroy').remove() 
    } };
    for ( var keyVar in dialogbox['queryKey'] )
              eval( "dialogoptions." + keyVar + " = dialogbox['queryKey'][keyVar]");
};


$("body").append("<div id='TB_load'><img src='"+imgLoader.src+"' /></div>");
$('#TB_load').show();
if (urltosend.search(/\?/) > 0) {
    urltosend = urltosend + "&-ajax=1";
} else {
    urltosend = urltosend + "?-ajax=1";
}
if ($('[ajaxbox="' + ajaxbox + '"]').length) {
  $('[ajaxbox="' + ajaxbox + '"]').each( function () { $(this).empty(); });
};
$.ajax({
    type: "GET",
    url: urltosend,
    data: "",
    async: false,
    dataType: "html",
    success: function (html) {
        var re = /^<toajaxbox>(.*?)<\/toajaxbox>+(.*)/;
        if (re.test(html)) { 
            var match = re.exec(html);
            ajaxbox = match[1];
            html = Right(html, String(html).length - String(match[1]).length);
        }
        var re = /^<header>(.*?)<\/header>+(.*)/;
        if (re.test(html)) { 
            var match = re.exec(html);
            window.location = match[1];
            return false;
        }
        if (html.length > 0) {
            var newHtml = $(html);
            if ($('[ajaxbox="' + ajaxbox + '"]').length) {
                $('[ajaxbox="' + ajaxbox + '"]').each( function () { $(this).replaceWith(newHtml).ready( function () {
                    ajaxBoxInit(newHtml)
                    if (window.ajaxboxsuccess) ajaxboxsuccess(newHtml);
                }); });
                if ($('[ajaxdialog="' + ajaxbox + '"]').length = 0) {
                    if (dodialog) $(newHtml).wrap("<div class='flora ui-dialog-content' ajaxdialog='" + ajaxbox + "' style='overflow:auto;'></div>").parent().dialog(dialogoptions);
                }
            } else {
                $("body").append(newHtml).ready( function () {
                    ajaxBoxInit(newHtml);
                    if (window.ajaxboxsuccess) ajaxboxsuccess(newHtml);
                });
                if (dodialog) $(newHtml).wrap("<div class='flora ui-dialog-content' ajaxdialog='" + ajaxbox + "' style='overflow:auto;'></div>").parent().dialog(dialogoptions);
            }
        }
        var rel = $(theElement).attr('ajaxtriggerrel');
        if (rel != undefined) $('a[ajaxrel="' + rel + '"]').click();
        tb_remove();
        return false;
    },

    complete: function () {
        $("#TB_load").remove();
        }
});
return false;

}

最佳答案

绝对不是。你所描述的不是标准的jquery实践,但似乎是由于对javascript一无所知的人的糟糕设计选择造成的。

关于jQuery 编程风格?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4572093/

相关文章:

regex - 如何使用 Perl 将以下字符串中的逗号替换为 & ?

javascript - jscrollpane, jquery tools::tabs 问题

javascript - 插件 iframe-resizer 获取parentIFrame

c++ - 什么时候使用 std::pair 比较好?

methods - 如何命名一个可能做或不做某事的方法?

sql - 以文本格式分割多个点并在 postgres 列中切换坐标

javascript - GOJS 将 Canvas 图导出为图像

javascript - ChartJs 图表不会更新新值

c - 是否应该为所有整数类型提供函数变体?

javascript - 在javascript中用正则表达式替换字符串的正确方法是什么?