额外的$(...)电话坏了吗?

时间:2011-12-06 01:26:04

标签: javascript jquery

如果我有下拉jQuery对象的代码,然后再对它进行一些调用

$("a.postSyncLink").click(function () {
    var resultsTarget = $("span", $(link).parent().next());
    resultsTarget.html("<img style='position: absolute;' src='" + waitImgUrl + "'/><span>Sync in progress</span>");

    $.get($(this).attr("data-url"), function (returnVal) {
        resultsTarget.text(returnVal);
    });
});

随后(并且不必要地)将该对象包装在jQuery函数中被认为是不好的做法吗? jQuery是否优化了这样多余的调用?

$("a.postSyncLink").click(function () {
    var resultsTarget = $("span", $(link).parent().next());
    $(resultsTarget).html("<img style='position: absolute;' src='" + waitImgUrl + "'/><span>Sync in progress</span>");

    $.get($(this).attr("data-url"), function (returnVal) {
        $(resultsTarget).text(returnVal);
    });
});

2 个答案:

答案 0 :(得分:11)

如果它们没有用于克隆原始jQuery对象,那么是的,这很糟糕:

http://api.jquery.com/jQuery/#cloning-jquery-objects

克隆了传递给jQuery的jQuery对象,这是我不会浪费的处理器时间。

当存储对jQuery对象的引用时,我发现使用$为变量名添加前缀很有用,这有助于我记住它是一个jQuery对象,并且不需要重新包装:

$("a.postSyncLink").click(function () {
    var $resultsTarget = $("span", $(link).parent().next());
    $resultsTarget.html("<img style='position: absolute;' src='" + waitImgUrl + "'/><span>Sync in progress</span>");

    $.get($(this).attr("data-url"), function (returnVal) {
        $resultsTarget.text(returnVal);
    });
});

答案 1 :(得分:2)

由于每次执行时都会创建新的jquery对象,因此会影响性能。

尽可能避免使用它。

只需创建jquery对象并使用它。