有测试代码:
<body>
<div id="abc">1</div>
<div>2</div>
<script>
var id = document.getElementById("abc");
var div = id.nextElementSibling || id.nextSibling;
// change order
var div1 = id.nextSibling || id.nextElementSibling;
alert(div.textContent) // alert: 2
alert(div1.textContent) // alert nothing
</script>
</body>
此代码在
chrome brower
上运行,第一个alert()弹出2
,但是第二个alert()则不弹出任何内容。为什么? 最佳答案
尝试:
<div id="abc">1</div><div>2</div> //2, 2
<div id="abc">1</div>x<div>2</div> //2, x
问题在于,使用或时,仅评估条件的第一部分(为true时)。因此,您的第二个调用返回字符串(空格)-请参见下面的nextSibling方法描述。
也尝试此更改:
alert('"' + div1.textContent + '"') // the second call will return " " (with also line break inside)
https://www.w3schools.com/jsref/prop_node_nextsibling.asp
此属性与nextElementSibling之间的区别在于,nextSibling返回下一个同级节点作为元素节点,文本节点或注释节点,而nextElementSibling返回下一个同级节点作为元素节点(忽略文本和注释节点)。