2012-02-02 7 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のセットの中の現在の要素があるキャッシュ:次のコードは、いずれよりも効率的である - あなたが実際にそれらの関数内でのすべてのjQueryのメソッドを使用する必要はありません、と述べた

標準的なDOM要素からjQueryラップされたセットに変換する作業が必要となるため、推奨される方法です。したがって私は最初のアプローチをお勧めします。

jQueryオブジェクトにDOM要素をラップするときの命名規則に従うことをお勧めします。個人的に私は常に$thisそれを呼び出す - ドルは私にそのjQueryオブジェクト(私が使用して別の規則を)伝えるとthisは、私はそれが(jQuery(this)を呼び出す必要がなくなりますので、最初のものは優れていると思い、それが現在の要素

2

thisを含むjQueryオブジェクトへの参照を保存すると、より速くなります。これは、jQueryメソッドをthisに適用するたびに新しいjQueryオブジェクトを作成する必要がないためです。あなたの最初の例では、$への呼び出しが1つあります。 2番目の例では3

は、私はあなたがここで何をやっているかわからないがあります。

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

ちょうどする必要があること:

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

うん!間違ったコピーと貼り付け:) – markzzz

2

前者が一般的に好まれる - 場合同じjQueryコンストラクタを繰り返し使用することになります。

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

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

だ私に語りました関数の呼び出しです)たくさんの時間