2016-04-08 1 views
0

は、私はDOMのjQueryのグループは、いくつかのセレクタを一致するノード収集したと仮定し、セレクタは、それが一致するノードの一部が他の試合の子孫、例えばかもしれないという可能性だようなものである:他のメンバーの子孫であるjQueryグループの要素を削除するにはどうすればよいですか?

<div class="row"> 
    <!-- ... --> 
    <div class="row"><!-- ... --></div> 
    <!-- ... --> 
</div> 
<div class="row"> 
    <!-- ... --> 
    <div class="row"> 
     <!-- ... --> 
     <div class="row"><!-- ... --></div> 
    </div> 
    <div class="row"><!-- ... --></div> 
    <!-- ... --> 
</div> 
$rows = $('.row'); 

ここで、私が取るべきアクションが各ノードのサブツリー全体に影響するとしたら、与えられたDOMノードに対して最大で1回動作することを確認する必要があります。同じグループの他のメンバーの子孫である私のグループのすべての要素を削除するにはどうすればよいですか?

+0

トップレベルの '.row'要素が共通の親の子孫である場合は、直接子孫セレクタを使用します:' $( '#parent> .row') ' –

+0

確かに動作する場合もありますが、 DOMがより分散して予測できない場合にも機能する、より一般的なソリューションにもっと興味があります。 –

答えて

0

私はこれを達成するために見つけた最も簡単かつクリーンな方法は$.fn.not()$.fn.find()の行動を組み合わせることである。

var $rows = $('.row'); 
$rows = $rows.not($rows.find($rows)); 

$elems.find($elems)$elemsの1つまたは複数のメンバーの子孫である$elemsのすべてのメンバーを返します。 (要素そのものを含まないので、そこに心配はありません)。 $elems.not(group)$elemsのメンバーだけがgroupには含まれていません。これにより、他のメンバーの子である$elemsのすべてのメンバーが検索され、他のメンバーがすべて返されます。

関連する問題