我现在正在使用jQuery 1.6.1。在Firebug中,我已经看到了这个:
console.log($(document).find("*"))
做我期望的事;它返回文档的所有子项。但是这个:
console.log($(document).find("> *"))
没有。它返回一个空集!在我看来,如果文件有后代,那么它必须至少有一个直系后代。 jQuery显然不同意。这是一个错误,还是我的误解?另请注意:
console.log($("body").find("> *"))
做我期望的,它返回body标签的直接后代。提前感谢任何见解!
答案 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
节点。从这个角度来看,没有错误,只是这种不一致。