调用 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()

jQuery .next('div') 切换不起作用

Next.js 服务器端 api 调用返回 500 内部服务器错误

Jquery中next和children的区别

JQuery next().attr() 不工作

顶端迭代器