我有一个包含3行的表.每行都有类:.myClass.
然后我查询表行document.getElementsByClassName('myClass')并迭代元素,将每行的类更改为.otherClass.
然而,
console.log(document.getElementsByClassName('otherClass'))
Run Code Online (Sandbox Code Playgroud)
只返回一行.
而且,当我查看DOM时,只有第一.myClass行将其类更改为.otherClass; 另一个保持不动.
如何将所有.myClass行的类更改为.otherClass?
var c = document.getElementsByClassName('myTable')[0];
var x = c.getElementsByClassName('myClass');
for (var i = 0; i < x.length; i++) {
x[i].className = 'otherClass';
}
x = c.getElementsByClassName('otherClass');
console.log(x); // only one elementRun Code Online (Sandbox Code Playgroud)
<table class="myTable">
<tr class="myClass2">
<td>Content</td>
<td>Content</td>
</tr>
<tr class="myClass">
<td>Content</td>
<td>Content</td>
</tr>
<tr class="myClass">
<td>Content</td>
<td>Content</td>
</tr>
</table>Run Code Online (Sandbox Code Playgroud)
geo*_*org 16
getElementsByClassName与其他HTML集合一样,它是"实时"的,也就是说,当您为其成员分配另一个类名时,它会立即从集合中删除,并且其长度会减少.这就是你的循环只运行一次的原因.
var x = document.getElementsByClassName('myClass');
alert("before: " + x.length);
x[0].className='otherClass';
alert("after: " + x.length);Run Code Online (Sandbox Code Playgroud)
.myClass { color: black }
.otherClass { color: red }Run Code Online (Sandbox Code Playgroud)
<b class="myClass">hi</b>
<b class="myClass">hi</b>Run Code Online (Sandbox Code Playgroud)
文件:
HTML DOM中的HTMLCollection是实时的; 更改基础文档时会自动更新.
要回答您的问题,可以设置第一个元素的className,直到集合中没有剩余:
while(x.length > 0) {
x[0].className = 'otherClass';
}
Run Code Online (Sandbox Code Playgroud)