2

クラスを持つネストされたdivを含むHTML構造がありますcontainer

<div class="container" id="0">
  <div id="1">
    <div class="container" id="2">
      <div class="container" id="3"></div>
    </div>
    <div id="4">
      <div class="container" id="5"></div>
    </div>
  </div>
</div>

これには、より多くのdivとより深い/異なるネストが含まれる可能性があります。

ツリーのある時点から始めて、他のコンテナ内にネストされていない、そのサブツリー内のすべてのコンテナを見つけたいと思います。たとえば、divからdivと#1を検索したいのですが、検索しません(既に見つかったコンテナにネストされているため)。#2#5#3#2

これを達成するための最良の方法は何でしょうか?

4

3 に答える 3

2

jQueryのfilter()メソッドを使用してみてください。

$items = $('#0').find('.container').filter(function(index) {
    return !$(this).parents(':not(#0)').hasClass('container');
});

基本的に、クラスが最上位にあるすべてのアイテムを検索し、直接の親がクラスを持っているかどうかに基づいてセットをフィルタリングし.containerます。.container.container

実用的な例については、こちらをご覧ください:http: //jsfiddle.net/TzL8Z/1

于 2011-01-18T19:21:12.103 に答える
2
function getOuterContainers(el) {

    if (el.length == 0)
        return $([]);
    else
        return el.children('.container').add( getOuterContainers(el.children(':not(.container)')) );

}

それをチェックしてください:http://jsfiddle.net/GZ3Tx/

于 2011-01-18T19:24:55.880 に答える
0

任意の開始ノードで動作するソリューション:

function getContainers(base) {
   return base.find('.container').not(base.find('.container .container'));
}

例: http: //jsfiddle.net/tejp/GSRH2/2/

利点は、他のいくつかの回答の場合のように、これが単純なJQueryセレクターで選択可能である必要のない任意の開始ノードで機能することです。また、。を使用してツリー全体を「手動で」歩く必要はありませんchildren()

.itemこのアプローチは、たとえば、すべてのがネストされていないなど、同様の問題に簡単に拡張することもできます.container

于 2011-01-19T18:12:08.103 に答える