如何更改document.getElementsByClassName检索的所有元素的类

Mit*_*tre 8 html javascript

我有一个包含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 element
Run 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)

  • @freefaller它不完全是一个数组; 它是一个[`HTMLCollection`](https://developer.mozilla.org/en-US/docs/Web/API/HTMLCollection) (2认同)