2

現在、jQuery 1.6.1 を使用しています。Firebug では、次のことがわかりました。

console.log($(document).find("*"))

私が期待することをします。ドキュメントのすべての子を返します。でもこれは:

console.log($(document).find("> *"))

ではない。空のセットを返します! ドキュメントに子孫がある場合、少なくとも 1 つの直系の子孫が必要であると私には思えます。jQuery は明らかに同意しません。これはバグですか、それとも私の誤解ですか? これにも注意してください:

console.log($("body").find("> *"))

body タグの直接の子孫を返します。洞察を事前にありがとう!

4

1 に答える 1

1

document確かに (少なくとも) 1 つの子HTMLHtmlElement( form を継承するHTMLElement) があるため、理論的には、jQuery (またはこの場合は Sizzle) はこれを返す必要があります。

バグですか?それは設計上の決定かもしれません。しかし、何$(document).children()が得られるか見てみましょう:

alert($(document).children().length);

出力します1

$(document).find("> html")が空のセットを$(document).find("html")返すのに対し、 が返されることも興味深いですHTMLHtmlElement。しかし、次のとおりですtrue

$(document).find("html").parent()[0] === document

少なくとも、jQuery の矛盾です。IMO.find('> *')と同じ要素を返す必要があります。.children()

Sizzle または jQuery のバグである可能性があります (時間があれば、Sizzle のソース コード[ソース]を見て、問題がどこにあるかを突き止めてください)。

一方、子セレクターはノードでのみ機能し、Elementノードでdocumentはないと言えElementます。この観点から、バグはなく、この不一致だけです。

于 2011-08-28T14:19:21.710 に答える