2012-02-01 82 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