19

これを考えると:

<div id="div1">
    <div id="div2">
        <div id="div200">
            <div id="div3" class="b">       
            </div>
            <div id="div300">
                <div id="div4" class="b">
                     <div id="div5"> 
                        <div id="div6" class="b">
                        </div>            
                     </div>
                </div>
            <div>
        <div>
    <div>
</div>

クラス "b" の要素の子 (深い) を見つける方法が必要ですが、一致する要素内にネストされている子は見つかりません。

テストケース:

これは私が必要なものです:

ケース 1:

$("#div1").some_jquery_syntax(".b")
Should return:
div3, div4

ケース 2:

$("#div5").some_jquery_syntax(".b")
Should return:
div6

難しいのは、div1 から開始するときに div2 をスキップする必要があることです。だから私はただ使うことはできません$("#div1").find("> .b")

私の試み:

私はこれを試しました:

$("#div1").find(".b")
[<div id="div3" class="b"></div>, <div id="div4" class="b"></div>, <div id="div5" class="b"></div>]

良くない: div4 内にネストされているため、div5 は必要ありません。

私はこれを試しました:

$("#div0").find(".b").not(".b .b")
[<div id="div3" class="b"></div>, <div id="div4" class="b"></div>]

div0 から開始する場合は問題ありませんが、div4 から開始すると機能しません。

$("#div5").find(".b").not(".b .b")
[]
4

3 に答える 3

17

直接の孫を見つける:

​$("#div1").children().children(".b");

フィドル: http://jsfiddle.net/jonathansampson/Dy6GJ/

どこまで深く進めればよいかわからないが、すべて.bを 内に収めたくない場合は.b、親の制限を尊重しながらフィルターを使用してください。.parentsUntil次の方法を使用できます。

var parent = "#div1";
$(".b", parent).filter(function(){
    return !$(this).parentsUntil(parent, ".b").length;
}).css("border", "1px solid red");​​​​​​​​​​​​​​​​​

フィドル: http://jsfiddle.net/jonathansampson/Dy6GJ/3/

于 2012-06-05T17:35:32.513 に答える
5

一般(クラスのみ保証できる場合):

$("#div1").find(".b:not(.b .b)")

説明されているように(テストされていませんが、おそらく一般よりも高速です):

$("#div1").find("div.b:not(div.b div.b)")

「.b の子孫ではないすべての .b」

于 2012-10-08T21:12:08.757 に答える