2011-10-24 20 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试图获取其节点类型之前。

相关问题