调用 jQuery next() 不返回 nextSibling 对象
Posted
技术标签:
【中文标题】调用 jQuery next() 不返回 nextSibling 对象【英文标题】:Call to jQuery next() not returning the nextSibling object 【发布时间】:2012-02-01 04:54:52 【问题描述】:我的文档包含一个文本节点,其后有一个跨度节点。在 Chrome 检查器中,文本节点的 nextSibling 对象是 span 节点。但是,调用 textnode.next() 返回 0 个对象。我没有在下一次调用中添加选择器,并且整个代码中看似相同的情况都按预期工作。
以下是相关 DOM 树的样子:
<span id="parent-node">
some text
<span id="sibling-node">the span's text</span>
more text
</span>
为什么在“一些文本”节点上调用 next() 不会返回“兄弟节点”跨度?
【问题讨论】:
选择一个文本节点来玩它总是有问题的。span
如果有id,为什么不直接选择呢?
jQuery 通常不对文本节点进行操作。它适用于元素。例如,next()
直接跳过文本节点并忽略它们。
【参考方案1】:
来自the docs...
给定一个表示一组 DOM 元素 的 jQuery 对象,
.next()
方法允许我们在 DOM 树中搜索这些元素的紧随其后的兄弟并从匹配的元素构造一个新的 jQuery 对象。
因此,根据文档,预计 .next()
是从 element 节点调用的,而不仅仅是任何节点。
不支持从文本节点调用。
【讨论】:
我不知道文本元素不是 DOM 的一部分。感谢您的澄清。有没有有效的解决办法?我显然可以调用 parent() 并搜索文本节点,然后获取兄弟列表中的下一个元素,但这似乎不必要地耗时。 @Jack:它们是 DOM 的一部分,但它们不是 DOM 元素。 “元素”具体是类型 1 DOM 节点,而文本节点是类型 3 节点。修复可能只是使用本机nextSibling
而不是 jQuery 方法。以上是关于调用 jQuery next() 不返回 nextSibling 对象的主要内容,如果未能解决你的问题,请参考以下文章
jquery遍历节点 children(),next(),prev(),siblings()closest()