2

我目前正在使用 jQuery 1.6.1。在 Firebug 中,我看到了:

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

做我所期望的;它返回文档的所有孩子。但是这个:

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

才不是。它返回一个空集!在我看来,如果文档有后代,那么它必须至少有一个直系后代。jQuery 显然不同意。这是一个错误,还是我的误解?另请注意:

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

做我所期望的,它返回body标签的直接后代。提前感谢您的任何见解!

4

1 回答 1

1

document确实(至少)有一个孩子,这是一个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 的源代码[source]并找出问题所在)。

另一方面,可以说子选择器仅适用于Element节点,而document不是Element节点。从这个角度来看,没有错误,只是这种不一致。

于 2011-08-28T14:19:21.710 回答