jQuery报告没有文档的直接后代

时间:2011-08-28 13:54:03

标签: jquery document descendant

我现在正在使用jQuery 1.6.1。在Firebug中,我已经看到了这个:

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

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

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

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

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

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

1 个答案:

答案 0 :(得分:1)

document确实(至少)有一个孩子,这是一个HTMLHtmlElement(继承了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的不一致。 .find('> *')应返回与.children() IMO相同的元素。

可能是Sizzle或jQuery中的错误(有足够时间的人可以查看Sizzle's source code [source]并找出问题所在的位置)。

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