私はこのようなHTMLを持っています:
<div id="MyDiv">
<div class="Class1">
<div class="SClass1"></div>
</div>
<div class="Class2"></div>
</div>
違いはありますか
$('#MyDiv').find('.SClass1').show();
と
$('#MyDiv .SClass1').show();
私はこのようなHTMLを持っています:
<div id="MyDiv">
<div class="Class1">
<div class="SClass1"></div>
</div>
<div class="Class2"></div>
</div>
違いはありますか
$('#MyDiv').find('.SClass1').show();
と
$('#MyDiv .SClass1').show();
http://api.jquery.com/jquery/#selector-contextは次のように述べています。
内部的には、セレクターコンテキストは.find()メソッドで実装されるため、$('span'、this)は$(this).find('span')と同等です。
つまり、
$('#MyDiv .SClass1').show();
jQueryからわずか1歩離れて内部的にそれを作っています
$('#MyDiv').find('.SClass1').show();
このjsPerfテストケースを表示して、速度の違いを確認してください
@Dominicがコメントで述べたように、彼のjQuery Anti-Patterns for Performance&Compressionプレゼンテーションで、PaulIrishは次のように述べています。
セレクターの最適化
もちろん、#idから降りるのが最適です
// #id-based selector
var arms = $('#container div.robotarm');
// hyper-optimized #id case first, then find:
var arms = $('#container').find('div.robotarm');
あなたの場合、使用することfind()
はかなり無意味です(読みやすさを除いて-しかし、誰もがそれについて別の意見を持っているでしょう)。私find()
はそれが本当に必要な場合にのみ使用します:
$('#MyDiv').show().find('.SClass1').css(...);
ここで、最初に親要素で何かを実行し、1つ以上の子で他の何かを実行する必要があります。
基本的に違いはありません。ただしfind()
、スコープ変数とで使用する場合に便利ですthis
。
例えば:
$(document).ready( function() {
$('.action').click( function() {
$(this).find('p').text("hello world");
});
});
これは、 「helloworld」p
という名前のクラスを持つものにすべてを設定します。action
それらは両方とも同等です。2つのクエリを実行しているため、最初のクエリは少し遅くなります。速度の違いはおそらく目立たないでしょう。
コンストラクターでコンテナーを取得するプラグイン/コンポーネントを作成する場合に使用できfind
ます。これを検索のルートとして使用するよりもfind
、コンテナーの外部に要素が取得されないようにする必要があります。