2015-09-10 2 views
0

Я попытался получить массив изображений для создания простой карусели. Когда я пытаюсь изменить имя класса, чтобы показать или скрыть некоторые элементы мой массив измененными я не знаю, почему ...Странное поведение в GetElementsByClassName

Это моя скрипка 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 getAllElementsHided(){ 
    return document.getElementsByClassName("car-hide"); 
} 

function startSlide(){ 
    pictures = getAllElementsHided(); 
    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; 
} 

Может кто-нибудь помочь мне, пожалуйста?

+1

Вы могли бы использовать более семантический HTML:

и выберите элементы, не полагаясь на класс. –

ответ

3

.getElementsByClassName возвращает Живая коллекция элементов. Это всегда актуально. Если вы удалите функцию, которая сделала ее подходящей, она больше не будет присутствовать. Если вам нужно сохранить инвариантную коллекцию узлов для более поздней версии, вам необходимо продублировать ее с помощью .slice; Однако, так как живая коллекция не является Array, но массив-подобный объект, мы должны принять Array «s .slice и применять его на живой коллекции:

var pictures = Array.prototype.slice.call(getAllElementsHided()) 
+1

Намного проще (в данном случае) использовать * querySelectorAll *, поскольку он возвращает статический NodeList по умолчанию: 'document.querySelectorAll ('. Car-hide')'. – RobG

+0

@ RobG: Правда. Казалось, главная проблема в том, «почему он ведет себя так» ... – Amadan

+1

-Да, вы получили мой голос за эту часть. ;-) – RobG

Смежные вопросы