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

前端之家收集整理的这篇文章主要介绍了javascript – 如何更改document.getElementsByClassName检索的所有元素的类前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个包含3行的表.每行都有类:.myClass.

然后,我使用document.getElementsByClassName(‘myClass’)查询表行,并迭代元素,将每行的类更改为.otherClass.

然而,

console.log(document.getElementsByClassName('otherClass'))

只返回一行.

而且,当我查看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
<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>

解决方法

与其他HTML集合一样,getElementsByClassName是“实时”的,也就是说,当您为其成员分配另一个类名时,它会立即从集合中删除,并且其长度会减少.这就是你的循环只运行一次的原因.
var x = document.getElementsByClassName('myClass');
alert("before: " + x.length);
x[0].className='otherClass';  
alert("after: " + x.length);
.myClass { color: black }
.otherClass { color: red }
<b class="myClass">hi</b>
<b class="myClass">hi</b>

Docs

An HTMLCollection in the HTML DOM is live; it is automatically updated when the underlying document is changed.

要回答您的问题,可以设置第一个元素的className,直到集合中没有剩余:

while(x.length > 0) {
   x[0].className = 'otherClass';  
}

猜你在找的JavaScript相关文章