有测试代码:

<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返回下一个同级节点作为元素节点(忽略文本和注释节点)。

07-24 21:54