尽管我偶尔会得到奇怪的结果,但在我看来,这些结果是相同的,所以有人可以形容差异吗?

最佳答案

'nextSibling'返回下一个Node对象,而'nextElementSibling'返回下一个Element对象,所以可能的真正问题是Node和Element之间的区别是什么?

基本上,元素是由HTML标记指定的,而节点是DOM中的任何对象,因此元素是节点,但是节点也可以包括空格,注释,文本字符或换行符形式的文本节点。有关Elements vs Nodes的更多信息,请参见Difference between Node object and Element object?

即采用以下DOM代码段

<div id="start"></div>
Me
<p>Hi</p>

使用nextSibling您将获得:
console.log(document.getElementById('start').nextSibling); // "\nMe\n"
console.log(document.getElementById('start').nextSibling.nextSibling); // "<p>

而使用nextElementSibling则会得到:
console.log(document.getElementById('start').nextElementSibling);// "<p>"

此外,nextElementSibling是IE10 +,是较新的方法,而nextSibling具有完整的浏览器支持

10-07 21:11