使用previousSibling和nextSibling来设置属性

时间:2015-03-01 22:50:34

标签: javascript html dom nextsibling

所以,自从我开始学习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

1 个答案:

答案 0 :(得分:4)

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

另一种选择是使用nextElementSibling属性而不是nextSibling,这将选择1 document.getElementById("about") .parentNode .nextElementSibling .classList // https://developer.mozilla.org/en-US/docs/Web/API/Element/classList .add("next"); {{1}}的下一个兄弟节点,即下一个{{3}元素的兄弟姐妹。

{{1}}