哪个版本在jQuery上更高效?

时间:2012-02-02 13:51:11

标签: jquery

第一版:

$(".myClass").focus(function() {
    var MyRef=$(this);
    if (MyRef.val() == MyRef.attr("rel")) {
        MyRef.val("");
    }
});

$(".myClass").focusout(function() {
    var MyRef=$(this);
    if (MyRef.val() == "") {
        MyRef.val(MyRef.attr("rel"));
    }
});

第二版:

$(".myClass").focus(function() {
    if ($(this).val() == $(this).attr("rel")) {
        $(this).val("");
    }
});

$(".myClass").focusout(function() {
    if ($(this).val() == "") {
        $(this).val($(this).attr("rel"));
    }
});

那么,如果没有保存this变量或使用它?还是没有改变?

4 个答案:

答案 0 :(得分:2)

保存对包含this的jQuery对象的引用会更快,因为每次要将jQuery方法应用于this时都不需要构造新的jQuery对象。在您的第一个示例中,有一次调用$。在第二个例子中有3个。

我不确定你在这做什么:

$(MyRef.val(MyRef.attr("rel"));

那应该只是:

MyRef.val(MyRef.attr("rel"));

答案 1 :(得分:2)

前者通常是首选 - 如果你要反复使用相同的jQuery构造函数,你应该缓存它。

也就是说,实际上你根本不需要在这些函数中使用jQuery方法 - 以下代码比以下代码更有效:

$(".myClass").focus(function() {
    if (this.value === this.getAttribute('rel') {
        this.value = '';
    }
});

$(".myClass").focusout(function() {
    if (this.value === '') {
        this.value = this.getAttribute('rel');
    }
});

答案 2 :(得分:2)

建议在包装的jQuery集中缓存当前Element,因为需要工作才能将标准DOM元素转换为jQuery包装集。因此,我建议采用第一种方法。

清晰的一个好方法是在jQuery对象中包装DOM元素时遵循命名约定。我个人总称它为$this - 美元告诉我它是一个jQuery对象(我使用的另一个约定),this告诉我它是当前元素

答案 3 :(得分:1)

我认为第一个更好,因为它可以让你免于调用jQuery(this)(这是对函数的调用)很多次