使用previousSibling和nextSibling来设置属性

Working with previousSibling and nextSibling to set attributes

本文关键字:设置 属性 nextSibling previousSibling 使用      更新时间:2023-09-26

因此,自从我开始学习JavaScript以来,我一直在阅读Tim Wright的《学习JavaScript》一书。

在这本书中,我发现了一章关于如何在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,也就是说,您的代码试图做的是向下一个同类textNode添加一个类。如果删除2个li元素之间的换行符和其他隐藏字符,则代码将按预期工作。

另一个选项是使用nextElementSibling属性而不是nextSibling,它将选择具有1nodeType的下一个同级节点,即元素的下一HTMLElement同级节点。

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