2012-02-01 87 views
1

我的文档包含一个文本节点,后面有一个跨度节点。在Chrome检查器中,文本节点的nextSibling对象是跨度节点。但是,调用textnode.next()会返回0个对象。我没有在下一次调用中添加选择器,并且整个代码中的看起来相同的情况都按预期工作。调用jQuery next()不返回nextSibling对象

下面是有关DOM树的样子:

<span id="parent-node"> 
    some text 
    <span id="sibling-node">the span's text</span> 
    more text 
</span> 

为什么会调用next()的“一些文本”节点不返回“兄弟节点”跨度上?

+1

选择一个文本节点玩它总是有问题。为什么不直接选择'span'如果它有一个id? – ShankarSangoli 2012-02-01 05:02:09

+0

jQuery通常不会在文本节点上运行。它适用于元素。例如,'next()'跳过文本节点并忽略它们。 – jfriend00 2012-02-01 05:10:05

回答

0

the docs ...

如果提供的jQuery代表了一组DOM元素,该.next()方法允许我们通过这些元素在DOM树紧随其后的兄弟要搜索的并从匹配元素构造一个新的jQuery对象。

所以根据文档,预计.next()是从元素节点调用,不是任何节点。

不支持从文本节点调用。

+0

我不知道文本元素不是DOM的一部分。感谢您的澄清。有没有一个有效的修复?我明显可以调用parent()并搜索文本节点,然后获取兄弟列表中的下一个元素,但这似乎不必要的耗时。 – Jack 2012-02-01 05:09:50

+0

@Jack:它们是DOM的一部分,但它们不是DOM元素。 “元素”具体是1类DOM节点,而文本节点是类型3节点。修复可能只是使用本地'nextSibling'而不是jQuery方法。 – 2012-02-01 05:11:26