 |
Coders' city Nasza pasja to programowanie!
|
| Zobacz poprzedni temat :: Zobacz następny temat |
| Autor |
Wiadomość |
tarn0
Dołączył: 17 Mar 2011 Posty: 50
|
Wysłany: Wto Sty 31, 2012 6:13 pm Temat postu: getElementsByClassName wybiera co drugi element |
|
|
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 |
|
 |
|
|
Taeril
Dołączył: 20 Cze 2005 Posty: 1163
|
Wysłany: Sro Lut 01, 2012 1:48 pm Temat postu: |
|
|
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 |
|
 |
tarn0
Dołączył: 17 Mar 2011 Posty: 50
|
Wysłany: Sro Lut 01, 2012 5:07 pm Temat postu: |
|
|
@Taeril super wytłumaczony problem dzięki |
|
| Powrót do góry |
|
 |
|
|
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
|