为什么className不能改变所有指定的class值?

为什么className不能改变所有指定的class值?

老师你好,我用document.getElementsByClassName的办法选中了class="first"的标签,查询className的时候也输出了4个first,想用下面的代码把class的值都改成"second",却只更改了2个,没有把4个class全部改过来,这是什么原因?

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>getElementBy</title>

</head>

<body>

<p class="first">空气</p>

<div class="first">空气</div>

<div class="first">空气</div>

<div class="first">空气</div>

<script>

var first=document.getElementsByClassName("first");

for(var i=0;i<first.length;i++){

console.log(first[i].className="second");}

</script>

</body>

</html>


正在回答

登陆购买课程后可参与讨论,去登陆

2回答

同学你好,关于同学的疑问,解答如下:

1、使用getElementsByClassName这种方法会随着文档操作而改变。假如通过getElementsByClassName获取元素,后面的代码中增加了一个新元素。那么前面获取的类数组中也会动态更新增加一个元素。可以参考下方的例子:
http://img1.sycdn.imooc.com//climg/5df086ee094274bc07830816.jpg

控制台

http://img1.sycdn.imooc.com//climg/5df087210968e2db05150326.jpg

关于为什么会修改两个类名,可以参考上次回答中的注释。

2、getElementById方法不是动态的。像getElementsByTagName、getElementsByClassName这些方法是动态的。

3、是的。

如果我的回答帮到了你,欢迎采纳,祝学习愉快~

好帮手慕言 2019-12-11 10:26:21

同学你好,原因是使用getElementsByClassName方法获取元素是动态的,也就是说获取到的元素个数是实时更新的。执行过程可以参考下方的注释。如果所有元素的类名都要修改为second,可使用querySelectorAll方法获取所有的元素

http://img1.sycdn.imooc.com//climg/5df053610929e29d10930283.jpg

如果我的回答帮到了你,欢迎采纳,祝学习愉快~

  • 提问者 花生香又脆 #1
    老师你好, 1.getElementsByClassName方法获取到的元素个数是实时更新的,这句话不太能理解,为什么这个会造成只能更改2个元素名啊? 2.所有的getElementBy...的查找方法获取的元素都是动态的吗? 3.querySelectorAll获取的元素是静态的吗?
    2019-12-11 12:54:13
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师