GetElementsByClassName中的怪异行为

问题描述 投票:0回答:1

我已经尝试获取一系列图片来创建一个简单的轮播。当我尝试更改类名以显示或隐藏某些元素时,我的数组被修改了,我不知道为什么...

这是我的小提琴https://jsfiddle.net/op1nzkxc/

HTML:

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <link rel="stylesheet" href="style/style.css">
</head>
<body>
<div id="my-carousel">
    <div>
        <div class="car-hide">Picture 1</div>
        <div class="car-hide">Picture 2</div>
        <div class="car-hide">Picture 3</div>
    </div>
</div>
<script src="js/script.js"></script>
</body>
</html>

Javascript:

pictures = [];

function getAllElementsHidden(){
    return document.getElementsByClassName("car-hide");
}

function startSlide(){
    pictures = getAllElementsHidden();
    console.log(pictures);
    pictures[1].className = "car-show";
    console.log(pictures);
}

startSlide();

CSS:

body{
    text-align: center;
}

ul{
    text-decoration: none;
}

.car-hide{
    display: none;
}

有人可以帮我吗?

javascript dom
1个回答
3
投票

.getElementsByClassName返回元素的活动集合。它始终是最新的。如果删除使它合格的功能,则该功能将不再存在。如果以后需要保留节点的不变集合,则需要使用.slice复制它;但是,由于实时集合不是Array而是类似数组的对象,因此我们需要采用Array.slice并将其应用于实时集合:

var pictures = Array.prototype.slice.call(getAllElementsHided())
© www.soinside.com 2019 - 2024. All rights reserved.