2012-02-02 36 views
0

第一個版本:這個版本中的哪一個在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一個變量或使用它呢?還是沒有改變?

回答

2

緩存當前元素在包裹的jQuery集推薦的做法,因爲需要將工作從標準DOM元素轉換爲jQuery包裝集。因此,我會推薦第一種方法。

明確的一個好方法是在將jQuery元素包裝到jQuery對象中時遵循命名約定。個人而言,我總是把它$this - 美元告訴我它的jQuery(另一次會議上我使用)和this告訴我這是當前元素

2

保存對包含this的jQuery對象的引用將會更快,因爲您不需要在每次將jQuery方法應用到this時構造新的jQuery對象。在你的第一個例子中,有一個電話$。在第二個例子中有3

我不知道你在這裏做什麼:

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

這應該僅僅是:

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

是啊!錯誤的複製和粘貼:) – markzzz 2012-02-02 13:54:31

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'); 
    } 
}); 
1

我認爲第一個是更好,因爲它可以節省你從哪打來jQuery(this)(其是一個功能的調用)很多次

相關問題