2011-07-04 20 views
1

コンテキスト:私は(PHPのセッションのフォールバック付き)のHTMLのlocalStorage APIを使用していますfavouriting システムを構築しています。ふぁぼ項目が ページ上にある場合は、JSでクラスの好きな 'を追加...要素が最初に存在するかどうか確認する必要がありますか?

私は要素のidがページ上に存在するかどうかわからない場合。それが最初に存在するかどうかを確認する方が良いか、またはjQueryがfalseを効率的に返しますか?

+0

"お気に入りのアイテムがページ上にある" 場合はどのようにチェックしていますか? – Dogbert

答えて

0

if ($('#item_123').length === 1) { 
$('#item_123').remove(); 
} 

VS

$('#item_123').remove(); //this turned out slower for me in chrome 13 
+1

Hm、Chrome 12では私の方が速いことが判明しました。また、[ここには正しいタグのリビジョンがあります](http://jsperf.com/jquery-check-for-null-selector-or-just-perform-method2/4 )。 – brymck

+0

テストでは、一致する要素がないので、最初の例では '$( '#item_123')。remove();が実行されません。このように、あなたがしているのは '$( '#item_123')。length === 1'を' $( '#item_123')。だから、 '.length'プロパティにアクセスする方が' .remove() 'メソッドを呼び出すよりもうまくいくでしょう。 – user113716

+0

私をjsperfの方向に送信してくれてありがとう – Haroldo

0

いずれにせよ、常に$()を実行するつもりです。したがって、そのメソッドの結果を参照する変数を保持し、存在するかどうかをチェックすることで効率の損失(または無視できる損失)はありません。

0

おそらくそうではありません。 jQueryが一致するものが見つからない場合は、何も列挙されずに移動します。

var $favorite = $("#favorite"); 
if ($favorite.length) {   // Test whether it exists 
    $favorite.doSomething(); 
} 

とより良いように記述されています:他の言葉では、このようなものは不要である似たような状況on jsperfためのテストコードがあり

$("#favorite").doSomething(); 
関連する問題