gpt4 book ai didi

javascript - childNode 意外行为

转载 作者:行者123 更新时间:2023-11-28 11:45:29 24 4
gpt4 key购买 nike

场景

我想获取 div 的所有子节点并更改其颜色。代码:

function myFunction() {
var divv = document.getElementById("divv");
var myCollection = divv.childNodes;
var len = myCollection.length;
var i;
for (i = 0; i < len; i++) {
myCollection[i].style.color = "red";
}
}
<div id="divv">

<h2>JavaScript HTML DOM</h2>

<p>Hello World!</p>
<p>Hello Norway!</p>
<p>Click the button to change the color of all p elements.</p>

<button onclick="myFunction()">Try it</button>
</div>

错误:这是行不通的。看来在我的集合中我拥有所有节点。 h2p 文本按钮。我预计只有 pH2 和按钮。

编辑说明注意:元素内的空格被视为文本,文本被视为节点。评论也被视为节点。

所以我们需要检查节点是否是元素节点,或者使用querySelectorAll。下面的答案中的示例。感谢您的帮助。

最佳答案

文本节点没有 style 属性。如果您想使用 childNodes,请首先检查 nodeType 是否为 1(Element 节点):

function myFunction() {
var divv = document.getElementById("divv");
var myCollection = divv.childNodes;
var len = myCollection.length;
var i;
for (i = 0; i < len; i++) {
if (myCollection[i].nodeType === 1) myCollection[i].style.color = "red";
}
}
<div id="divv">
<h2>JavaScript HTML DOM</h2>
<p>Hello World!</p>
<p>Hello Norway!</p>
<p>Click the button to change the color of all p elements.</p>
<button onclick="myFunction()">Try it</button>
</div>

但我更喜欢在这里使用 querySelectorAllforEach:

function myFunction() {
document.querySelectorAll('#divv > *')
.forEach(child => child.style.color = "red");
}
<div id="divv">
<h2>JavaScript HTML DOM</h2>
<p>Hello World!</p>
<p>Hello Norway!</p>
<p>Click the button to change the color of all p elements.</p>
<button onclick="myFunction()">Try it</button>
</div>

(或者,您可以简单地将#divvstyle.color设置为红色)

关于javascript - childNode 意外行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51320356/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com