3

これは私のコードです:

<div class="parent">
    <div class="child">&nbsp;</div>            
    <div class="child">&nbsp;</div>
    <div class="child">&nbsp;</div>
    <div class="child">&nbsp;</div>    
</div>

<div class="parent">
    <div class="child">&nbsp;</div>            
    <div class="child">&nbsp;</div>
    <div class="child">&nbsp;</div>
</div>

$('.child').each(function() {
    $(this).parent().addClass('childParent');
    console.log("step");
});?

しかし、ご覧のとおり、addClass7 回必要ではありません。各ステップを減らすことは可能ですか?実際、この例では、addClass2 回だけで十分です。

4

4 に答える 4

14

はい:.parent()コレクションを呼び出すだけです。要素は jQuery コレクションで複製されません

$('.child').parent().addClass('childParent');
于 2012-10-12T14:29:42.577 に答える
3

.each()他の回答からのアプローチの方が優れていることに注意してください。ただし、何らかの理由で実際に通話を維持する必要がある場合は、これが代替手段です。


:first-childセレクターを使用して、.child親ごとに 1 つの要素のみが選択されるようにすることができます。

$('.child:first-child').each(function() {
    $(this).parent().addClass('childParent');
    console.log("step");
});

.childこれで、2 つの要素 (各要素の最初の要素.parent) のみが選択されるため、.each()呼び出しでは反復する要素が 2 つだけになります。

于 2012-10-12T14:28:31.810 に答える
1

親を直接参照しているだけではない理由はありますか?

$('div.parent').addClass('childParent'); 
于 2012-10-12T14:32:00.803 に答える
0

それぞれの子を呼び出して、jquery に一意のメソッドを使用させることもできますが、おそらく最も効率的な使用方法ではありません。たとえば、すべての親に 10 人の子がいる場合、各子を選択して一意かどうかを確認するのに必要な時間の 10 倍以上かかることを意味します。

代わりに、親のみを選択して最初の選択を制限し、「has()」メソッドを使用してそれらをフィルタリングします。それは次のようになります。

$('div.parent:has(div.child)').addClass('childParent'); 
于 2012-10-18T15:00:31.240 に答える