Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/457.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何更改document.getElementsByClassName检索的所有元素的类_Javascript_Html - Fatal编程技术网

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

Javascript 如何更改document.getElementsByClassName检索的所有元素的类,javascript,html,Javascript,Html,我有一个包含3行的表。每行都有一个类:.myClass 然后,我使用document.getElementsByCassName('myClass')查询表行,并迭代元素,将每行的类更改为.otherClass 但是, console.log(document.getElementsByClassName('otherClass')) 只返回了一行 当我查看DOM时,只有第一个.myClass行的类更改为.otherClass;另一个保持不变 如何将所有.myClass行的类更改为.other

我有一个包含3行的表。每行都有一个类:
.myClass

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

但是,

console.log(document.getElementsByClassName('otherClass'))
只返回了一行

当我查看DOM时,只有第一个
.myClass
行的类更改为
.otherClass
;另一个保持不变

如何将所有
.myClass
行的类更改为
.otherClass

var c=document.getElementsByClassName('myTable')[0];
var x=c.getElementsByClassName('myClass');
对于(变量i=0;i

内容
内容
内容
内容
内容
内容

GetElementsByCassName
与其他HTML集合一样,是“活动”的,也就是说,当您将另一个类名分配给其成员时,它会动态地从集合中删除,并且其长度会递减。这就是为什么循环只运行一次

var x=document.getElementsByClassName('myClass');
警报(“之前:+x.length”);
x[0]。className='otherClass';
警报(“在:+x.length之后)
.myClass{color:black}
.otherClass{color:red}
hi
hi
As,返回一个集合。这意味着数组将随着元素的变化而“更新”

要解决问题,应该使用while循环,在
x.length
存在时迭代,并且只更改
HTMLCollection
的第一个元素

var c=document.getElementsByClassName('myTable')[0];
var x=c.getElementsByClassName('myClass');
while(x&&x.length){
x[0]。类名='otherClass'
}
var y=c.getElementsByCassName('otherClass');
警报(y长度)
.myClass{
显示:块;
背景色:红色;
}
.其他类别{
显示:块;
背景颜色:绿色;
}

内容
内容
内容
内容
内容
内容

乔治是对的。元素数组是动态更新的,所以不能依赖于它的长度

请尝试以下代码:

var c = document.getElementsByClassName('myTable')[0],
    x = c.getElementsByClassName('myClass');

while (x.length) {
    x[0].className = 'otherClass';
}
var y = c.getElementsByClassName('otherClass');
alert(y.length);

另一个选项是用元素填充普通数组,然后遍历该数组。
您将能够通过这种方式偶然获得元素的类名。

我在html中看不到其他类。
var x=c.getElementsByClassName('otherClass')不要重新声明
x
@BhojendraNepal,他将其设置为code@BhojendraNepal
x[i].className='otherClass'
@royhowie,这是不正确的,但不会引起任何问题这对我来说是新闻-我从来都不知道数组是“活的”。我假设(我想大多数人都会这样认为),通过
.getElementsByCassName
创建的数组不会因为对包含的对象的更改而更改them@freefaller它不完全是一个数组;是的,我也不知道。那么,如果您想修改getElementsByClassName获得的项的类名,您如何解决这个问题呢?@Mitre仅在集合具有长度时进行迭代,而该解决方案在while中有效。谢谢你的回答。