2013-01-03 18 views
13

Nie mogę zrozumieć, jak używać wielu identyfikatorów w javascript. Nie ma problemu z pojedynczym identyfikatorem i getElementById, ale gdy tylko zmienię identyfikatory na klasy i spróbuję użyć funkcji getElementsByClassName, funkcja przestanie działać. Czytałem o 100 post na temat; wciąż nie znalazłem odpowiedzi, więc mam nadzieję, że ktoś tutaj wie, jak sprawić, by getElementsByClassName działało.Jak korzystać z funkcji getElementsByClassName w funkcji javascript?

Herezje jakiś prosty kod, który użyłem do testowania:

function change(){ 
    document.getElementById('box_one').style.backgroundColor = "blue"; 
} 

function change_boxes(){ 
    document.getElementsByClassName ('boxes').style.backgroundColor = "green"; 
} 


<input name="" type="button" onClick="change(document.getElementById('box_one')); change_boxes(document.getElementsByClassName('boxes'))" value="Click" /> 

<div id="box_one"></div> 
<div class="boxes" ></div> 
<div class="boxes" ></div> 
+0

Jak sama nazwa wskazuje, funkcja zwraca ** ** wykaz elementów: https://developer.mozilla.org/ pl-US/docs/DOM/document.getElementsByClassName. –

+1

możliwy duplikat [Co jest złego w tym wywołaniu getElementsByClassName w JavaScript?] (Http://stackoverflow.com/questions/3391791/what-is-wrong-with-this-getelassesbyclassname-call-in-javascript) i [Can getElementsByClassName zmienić styl?] (http://stackoverflow.com/questions/10693845/can-getelementsbyclassname-change-style) i wiele więcej, które można znaleźć w kolumnie po prawej stronie. –

+0

Więcej duplikatów: http://stackoverflow.com/q/3349332/218196, http://stackoverflow.com/q/12377734/218196, http://stackoverflow.com/q/13667533/218196. –

Odpowiedz

28

getElementsByClassName() zwraca nodeListHTMLCollection *. Próbujesz działać bezpośrednio na wynik; musisz powtórzyć wyniki.

function change_boxes() { 
    var boxes = document.getElementsByClassName('boxes'), 
     i = boxes.length; 

    while(i--) { 
     boxes[i].style.backgroundColor = "green"; 
    } 
} 

* aktualizowane w celu odzwierciedlenia zmian w interfejsie

+0

Thx - działa dobrze. Nie jestem pewien, czy tak naprawdę rozumiem, dlaczego - źle skopiuję twoje rozwiązanie do większego projektu, pracuję nad nim i mam nadzieję, że uda mi się go tam również wykonać. – jan199674

+1

@Kenneth: 'getElementsByClassName' zwraca wszystkie elementy z tą nazwą klasy, tj. ** wiele ** elementów . Aby zmienić właściwości tych elementów, musisz przejść do iteracji na liście elementów. –

+0

Hmm - mam inny problem, którego nie mogę wymyślić. Mam 20 przycisków na tej samej stronie przy użyciu tej samej stylizacji. Przyciski są klasy div i wybierane przez onClick z działającym kodem z Mathletics. Każdy przycisk jest w rzeczywistości wykonany z 2 przycisków, które zmieniają położenie po z-index po kliknięciu i przedstawia nowy obraz dla każdego przycisku. – jan199674

4

getElementsByClassName Zwraca zestaw elementów, które mają wszystkie imiona klasy

var elements = document.getElementsByClassName('boxes'); 
for(var i=0, l=elements.length; i<l; i++){ 
elements[i].style.backgroundColor = "green"; 
} 
0

getElementsByClassName zwraca listę elementy, więc musisz ich powtórzyć i ustawić style na każdym elemencie jeden po drugim. Ma także ograniczone wsparcie w IE, więc może być lepiej wyłączyć za pomocą jQuery:

$(".boxes").css("backgroundColor", "green"); 
Powiązane problemy