我是计算机科学的学生,我们正在练习javascript,练习是: “将项目编号4替换为ID为”numberFour“的新项目和文本”Mistreatment“。” 这就是我做这个练习之前的样子:
然后我写了这个js代码来完成作业:
var vier = document.createElement("li");
vier.innerHTML = "Number four: Mistreatment";
vier.setAttribute("id", "numberFour");
var lijst = document.querySelector("#fiveReasons");
lijst.replaceChild(vier, lijst.childNodes[3]);
然后它看起来像这样:
所以我把我的代码更改为:
var vier = document.createElement("li");
vier.innerHTML = "Number four: Mistreatment";
vier.setAttribute("id", "numberFour");
var lijst = document.querySelector("#fiveReasons");
lijst.replaceChild(vier, lijst.childNodes[4]);
然后我明白了:
我的老师不明白为什么它不起作用,我也不知道,有人可以帮助我吗?
答案 0 :(得分:5)
childNodes
包含li
元素之间的空格的文本节点(以及评论节点,如果有的话等)。如果您只想要儿童元素:
children
var vier = document.createElement("li");
vier.innerHTML = "Number four: Mistreatment - updated";
vier.setAttribute("id", "numberFour");
var lijst = document.querySelector("#fiveReasons");
lijst.replaceChild(vier, lijst.children[3]);

<ol id="fiveReasons">
<li>Number one: Looking For a Mate</li>
<li>Number two: Boredom</li>
<li>Number three: Lack of Obedience</li>
<li>Number four: Mistreatment</li>
<li>Number five: Seeking Companionship</li>
</ol>
&#13;
children
适用于所有现代浏览器和IE8。
答案 1 :(得分:3)
问题是childNodes
集合还包括文本节点(空格,换行符,制表符等),因此它们也被计算在内。请改为children
:
lijst.replaceChild(vier, lijst.children[3]);