1

jquery find のバグに気付きました。

foo 自体を参照する可能性のあるセレクターを使用して foo.find を呼び出すと、機能しません。ここに例を示します。

http://jsfiddle.net/CgfPj/6/ (編集: フィドルを更新して、私がやろうとしていることをより明確に説明します)

test.find は、div の子であるスパンを見つけることができるはずですが、div 自体がテストであるため、検出できないようです。これはバグですか?

4

3 に答える 3

1

#testdivあなたが参照しているのです。

.find()#test指定されたセレクターに一致する子孫を返します。#test子孫がないdivため、test.find("div > span")どの要素とも一致しません。

あなたの直系spanの子孫を取得するには、#test以下を使用する必要があります。

test.find("> span")

フィドル


OP編集に従って編集:

$("#test > span, #test div > span")

のすべてspanの直接の子孫と、 -fiddleの内部の#testすべてのspan要素の直接の子孫を取得します。div#test

:parentIs(div)私の知る限り、CSSセレクター仕様にもjQueryにもセレクターのようなものはありませんが、フィルター関数を使用することでそのギャップを簡単に埋めることができます。

var spans = test.find('span').filter(function() {
    return $(this).parent()[0].tagName.toLowerCase() === 'div';
});

$("#result").text(spans.length);

フィドル

于 2012-10-03T01:08:16.160 に答える
0

私がこの権利を見ているなら..

var test = $("#test");
$("#result").text(test.find("div > span").length)
$("#result2").text($("div > span").length)​

testdiv自体である要素として定義することによって。基本的findに、そのdivにスパンを持つ別のdivを探すように指示します。試す

$("#result").text(test.find("span").length)
于 2012-10-03T01:09:44.193 に答える
0
<div id="test">
  <span>hello</span>
</div>   

$("#result").text(test.find("div > span").length)

長さ = 0 という出力は完全に正しいです。これはバグではなく、予期される動作です。

スパンは#testで div 内にネストされています

test.find("div > span") // #test div 内にネストされた div の子であるスパンを見つけようとしています。#test 内に div がないため、0 が返されます。

この場合、1 を返す HTML は

<div id="test">
   <div>
      <span>hello</span>
   </div>
</div> 
于 2012-10-03T01:20:29.863 に答える