2011-10-24 28 views
0

我有以下HTML:獲取下一個和以前的節點類型

<body>Testing1<span id="t1" style="background-color: green;">Testing2</span>Testing3</body> 

當我嘗試以下方法:

alert(window.jQuery('#t1').prev().nodeType); // undefined - tried get(0) as well 

alert(window.jQuery('#t1').get(0).nodeType); // 1 

alert(window.jQuery('#t1').next().nodeType); // undefined 

爲什麼,我得到了一個未定義當我嘗試獲得的節點類型上一個和下一個文本元素?

奇怪的是,如果我在跨度之前放了一個b標記,prev().get(0).nodeType返回1這是否意味着文本節點和註釋不可檢測?

回答

3

問題是,prevnext返回jQuery對象,而不是DOM元素。你將不得不再次使用get

alert(window.jQuery('#t1').next().get(0).nodeType); 

請注意,您也可以使用數組語法來獲取指定索引處的底層DOM元素:

alert(window.jQuery('#t1').next()[0].nodeType); 

編輯

只是重新 - 讀你的問題,看到你已經嘗試過。您正確地認爲prevnext將不會獲得文本或評論節點。他們只會獲得元素。

#t1之前的文本節點不是一個元素,因此prev將不會返回任何內容(在#t1之前或之後沒有同級元素)。

你可以這樣做:

alert(window.jQuery('#t1').get(0).previousSibling.nodeType); //3 
alert(window.jQuery('#t1').get(0).nextSibling.nodeType); //3 

但我不能完全肯定這些的瀏覽器兼容性。

+0

奇怪的是我在'get(0)'點獲得了未定義的螢火蟲報告 - 也看到更新問題。 – Abs

+0

是的,我只是重新讀你的問題。看我的編輯。 –

+0

我看到更奇怪的是,當我使用jQuery遍歷所有跨度時,我在循環中執行this.nextSibling。我可以得到nodeType!這是怎麼回事?也許有另一種方法來實現我想要做的事情? – Abs

0

你可以只使用純JS:

alert(document.getElementById('t1').previousSibling.nodeType); 
alert(document.getElementById('t1').nextSibling.nodeType); 
當然

你應該檢查的getElementById返回元素,並且有下一個/ previousSibling試圖獲取其節點類型之前。

相關問題