使用 previousSibling 和 nextSibling 设置属性

Working with previousSibling and nextSibling to set attributes

所以自从我开始学习 JavaScript 以来,我一直在阅读 Learning JavaScript 这本书 Tim Wright[=27] =].

在这本书中,我找到了一章关于我们如何移动和定位 DOM 树中的元素,其中一章是利用以兄弟姐妹为目标的属性,而我只是简单地做了书中的练习无法使以下语句起作用:

<ul id="nav">
  <li><a href="/" id="home">Home</a></li>
  <li><a href="/about" id="about">About Us</a></li>
  <li><a href="/contact" id="contact">Contact Us</a></li>
</ul>
<script>
   //Should add "next" class attribute to the "Contact Us" li tag.
   document.getElementById("about").parentNode.nextSibling.setAttribute("class", "next");
</script>

快速查看这段代码后,我想知道你们中是否有经验丰富的开发人员可以帮助我并解释为什么这不能正常工作。我感到很困惑,因为我不知道是我做错了什么,还是关于这些属性的文章拼错了。

无论如何,感谢您的时间和提前的帮助!

干杯!

cs.almeida

nextSibling 选择元素的下一个兄弟元素。下一个兄弟节点也可以是没有 setAttribute 方法的 textNode,即您的代码试图做的是将 class 添加到下一个兄弟文本节点。如果您删除 2 个 li 元素之间的换行符和其他隐藏字符,那么您的代码将按预期工作。

另一种选择是使用元素的 nextElementSibling property instead of the nextSibling, which will select the next sibling node that has nodeType of 1, i.e. the next HTMLElement 兄弟元素。

document.getElementById("about")
        .parentNode
        .nextElementSibling
        .classList // https://developer.mozilla.org/en-US/docs/Web/API/Element/classList
        .add("next");