下面是测试代码:
<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上运行,第一个2 ()弹出警报,但第二个alert()没有弹出任何内容。为什么?
发布于 2017-03-24 17:10:46
尝试:
<div id="abc">1</div><div>2</div> //2, 2
<div id="abc">1</div>x<div>2</div> //2, x问题是,使用or时,只计算条件的第一部分(当为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将下一个同级节点作为元素节点返回(忽略文本和注释节点)。
https://stackoverflow.com/questions/42995338
复制相似问题