Forum Coders' city Strona Główna Coders' city
Nasza pasja to programowanie!
 

 PomocPomoc   SzukajSzukaj   UżytkownicyUżytkownicy   GrupyGrupy  RejestracjaRejestracja 
Archiwum starego forum + teoria    RSS & Panel/SideBar
 ProfilProfil   Zaloguj się, by sprawdzić wiadomościZaloguj się, by sprawdzić wiadomości   ZalogujZaloguj 

Potrzebuję szybkiej odpowiedzi na moje pytanie... Skrócony regulamin

getElementsByClassName wybiera co drugi element



 
Odpowiedz do tematu    Forum Coders' city Strona Główna -> JavaScript
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
tarn0



Dołączył: 17 Mar 2011
Posty: 50

PostWysłany: Wto Sty 31, 2012 6:13 pm      Temat postu: getElementsByClassName wybiera co drugi element Odpowiedz z cytatem Pisownia

Chciałem za pomocą getElementsByClassName wybrać wszystkie elementy o podanej klasie i je usunąć.
Jednak okazało się że wybiera za każdym razem o drugi element, nie mam pojęcia dlaczego
Kod:
<script>
    function usun()
    {
   ww=document.getElementsByClassName("qwe");    
     j=0;
     while(ww[j])
     {
     ww[j].parentNode.removeChild(ww[j]);
     j++;
     }
     }
  </script>
<p onclick="usun()">usun</p>
<p class="qwe">1</p>
<p class="qwe">2</p>
<p class="qwe">3</p>
<p class="qwe">4</p>
<p class="qwe">5</p>
<p class="qwe">6</p>
Powrót do góry
Zobacz profil autora Wyślij prywatną wiadomość
Taeril



Dołączył: 20 Cze 2005
Posty: 1163

PostWysłany: Sro Lut 01, 2012 1:48 pm      Temat postu: Odpowiedz z cytatem Pisownia

W <script> zgubiłeś gdzieś type.
Zapodziało się także var - zmienne globalne są zbędne.
Przydało by się jakoś to ładnie sformatować.
p z onlick? - brzyyyyyyydal.

Operacje na elementach DOM bywają wolne, bo na przykład nie dostajesz tablicy elementów tylko coś co zachowuje się jak tablica ale dodatkowo automatycznie aktualizuje się przy zmianach dokumentu.

Jak w pętli while dodałem
console.log([j, ww[j].innerHTML]);
to otrzymałem:
Cytat:
[0, "1"]
[1, "3"]
[2, "5"]
Jak na początku było
[1, 2, 3, 4, 5, 6]
to po usunięcu elementu o indeksie 0 wyszło w kolejnym obrocie pętli
[2, 3, 4, 5, 6]
Teraz pod indeksem 1 mamy drugi element nowego układu... Mam nadzieję, że już widzisz skąd to się wzięło.

Najlepiej sprowadzić problem do wyczyszczenia wszystkich dzieci danego elementu (najlepiej z id). Wtedy mamy
Kod:
while(foo.hasChildNodes()) {
    foo.removeChild(foo.firstChild);
}
Jeśli foo to dany element.

Jeśli masz bardziej złożony układ strony i ciężko ingerować w HTML, to można wykorzystać zmienność ww
Kod:
function usun() {
    var ww=document.getElementsByClassName("qwe");
    while(ww[0]) {
        ww[0].parentNode.removeChild(ww[0]);
    }
}

_________________
T.

"Some people, when confronted with a problem, think 'I know, I'll use regular expressions.' Now they have two problems." - Jamie Zawinski
Powrót do góry
Zobacz profil autora Wyślij prywatną wiadomość
tarn0



Dołączył: 17 Mar 2011
Posty: 50

PostWysłany: Sro Lut 01, 2012 5:07 pm      Temat postu: Odpowiedz z cytatem Pisownia

@Taeril super wytłumaczony problem
dzięki
Powrót do góry
Zobacz profil autora Wyślij prywatną wiadomość
Wyświetl posty z ostatnich:   
Odpowiedz do tematu    Forum Coders' city Strona Główna -> JavaScript Wszystkie czasy w strefie CET (Europa)

Strona 1 z 1

 
Skocz do:  
Możesz pisać nowe tematy
Możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach
Możesz dodawać załączniki na tym forum
Możesz pobierać pliki z tego forum




Debug: strone wygenerowano w 0.30892 sekund, zapytan = 9
contact

| Darmowe programy i porady Jelcyna | VB4all | Tansze zakupy w Helionie |