jQuery 报告没有文档的直接后代
我现在使用的是 jQuery 1.6.1。在 Firebug 中,我看到了这一点:
console.log($(document).find("*"))
符合我的预期;它返回文档的所有子项。但这:
console.log($(document).find("> *"))
没有。它返回一个空集!在我看来,如果该文件有后代,那么它必须至少有一个直接后代。 jQuery 显然不同意。这是一个错误,还是我的误解?另请注意,这:
console.log($("body").find("> *"))
正如我所期望的那样,它返回 body 标记的直接后代。预先感谢您的任何见解!
I'm using jQuery 1.6.1 at the moment. In Firebug, I've seen that this:
console.log($(document).find("*"))
does what I expect; it returns all the children of the document. But this:
console.log($(document).find("> *"))
does not. It returns an empty set! It seems to me that, if the document has descendants, then it must have at least one direct descendant. jQuery apparently disagrees. Is this a bug, or a misunderstanding on my part? Note also that this:
console.log($("body").find("> *"))
does what I expect, it returns direct descendants of the body tag. Thanks in advance for any insight!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
document
确实(至少)有一个子元素,它是一个HTMLHtmlElement
(继承了HTMLElement
形式),所以是的,理论上,jQuery(或在这种情况下发出嘶嘶声)应该返回这个。这是一个错误吗?这可能是一个设计决定。但是让我们看看
$(document).children()
给我们带来了什么:输出
1
。同样有趣的是,
$(document).find("> html")
返回一个空集,而$(document).find("html")
返回HTMLHtmlElement
。但以下情况是true
:至少它是 jQuery 中的不一致之处。
.find('> *')
应返回与.children()
IMO 相同的元素。它可能是Sizzle或jQuery中的一个错误(有足够时间的人可以看看Sizzle 的源代码[source]并找出问题所在)。
另一方面,可以说子选择器仅适用于
Element
节点,而document
不是Element
节点。从这个角度来说,并没有什么bug,只是这个不一致。document
has indeed (at least) one child, which is anHTMLHtmlElement
(which inherits formHTMLElement
), so yes, theoretically, jQuery(or Sizzle in this case) should return this one.Is it a bug? It might be a design decision. But lets see what
$(document).children()
gives us:outputs
1
.It is also interesting that
$(document).find("> html")
returns an empty set, whereas$(document).find("html")
returns theHTMLHtmlElement
. But the following istrue
:At least it is an inconsistency in jQuery.
.find('> *')
should return the same elements as.children()
IMO.It may be a bug in Sizzle or jQuery (someone with enough time can have a look at Sizzle's source code [source] and find out where the problem could be).
On the other hand, one can say that the child selector only works on
Element
nodes, anddocument
is not anElement
node. From this point of view, there is no bug, just this inconsistency.