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

发布于 2024-12-01 22:39:17 字数 400 浏览 1 评论 0原文

我现在使用的是 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

只是一片海 2024-12-08 22:39:17

document 确实(至少)有一个子元素,它是一个 HTMLHtmlElement (继承了 HTMLElement 形式),所以是的,理论上,jQuery(或在这种情况下发出嘶嘶声)应该返回这个。

这是一个错误吗?这可能是一个设计决定。但是让我们看看 $(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 的源代码[source]并找出问题所在)。

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

document has indeed (at least) one child, which is an HTMLHtmlElement (which inherits form HTMLElement), 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:

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

outputs 1.

It is also interesting that $(document).find("> html") returns an empty set, whereas $(document).find("html") returns the HTMLHtmlElement. But the following is true:

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

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, and document is not an Element node. From this point of view, there is no bug, just this inconsistency.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文