Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用previousSibling和nextSibling设置属性_Javascript_Html_Dom_Nextsibling - Fatal编程技术网

Javascript 使用previousSibling和nextSibling设置属性

Javascript 使用previousSibling和nextSibling设置属性,javascript,html,dom,nextsibling,Javascript,Html,Dom,Nextsibling,因此,自从我开始学习JavaScript以来,我一直在阅读Tim Wright的《学习JavaScript》一书 在这本书中,我找到了一章关于如何在DOM树中移动和定位元素,其中一章是利用以兄弟姐妹为目标的属性,而在做书中的练习时,我根本无法使以下语句起作用: <ul id="nav"> <li><a href="/" id="home">Home</a></li> <li><a href="/about" i

因此,自从我开始学习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>
//应在“联系我们”li标记中添加“下一个”类属性。 document.getElementById(“关于”).parentNode.nextSibling.setAttribute(“类”,“下一个”);
在快速浏览了这段代码之后,我想知道你们当中是否有经验丰富的开发人员可以帮助我,并解释为什么这不能正常工作。我感到困惑,因为我不知道我是否做错了什么,或者关于这些属性的文章拼写错误

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

干杯


cs.almeida
nextSibling
选择元素的下一个同级。下一个同级节点也可以是没有
setAttribute
方法的
textNode
,也就是说,您的代码试图做的是向下一个同级textNode添加一个类。如果删除2个
li
元素之间的换行符和其他隐藏字符,则代码将按预期工作

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

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

所以发生的事情是,
textNode
被作为目标,而不是
elementNode
,原因是HTML代码中的换行符和其他隐藏字符?我永远也猜不到。另一个简短的问题,你认为我也应该像你一样写陈述吗?它似乎更容易阅读。最后,非常感谢您对Vohuman的支持,我想让您知道,您的支持对我理解这门语言有很大帮助。@cs.almeida非常欢迎您!我很高兴能帮上忙。使用那种写作风格实际上只是个人喜好的问题。当我在一个小文件中有一个长的行时,我使用这种样式。对我来说,它更具可读性、可维护性和可编辑性。