Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [javascript] kasowanie elementów
Forum PHP.pl > Forum > Po stronie przeglądarki > JavaScript
nmts
  1. <div id="content_normal">
  2. <div class="message" style="margin-top: 291px; margin-left: 163px; color: rgb(113,117,136);">Good morning:)</div>
  3. <div class="message" style="margin-top: 170px; margin-left: 332px; color: rgb(154,130,83);">Hello</div>
  4. <div class="message" style="margin-top: 295px; margin-left: 401px; color: rgb(127,79,106);">Hi !</div>
  5. <div class="message" style="margin-top: 389px; margin-left: 63px; color: rgb(129,77,78);">Hey sexy</div>
  6. </div>


Na stronie dynamicznie generuje się taki kod. Próbuje wykasować wszystkie divy z content_normal w następujący sposób:

  1. var content = document.getElementById('content_normal');
  2. var messagesA = content.getElementsByTagName('div');
  3. for(var i=0; i<messagesA.length; i++)
  4. {
  5. content.removeChild(messagesA.item(i));
  6. }


Kasuje to za każdym razem tą samą część divów. Gdy w pętli zrobię item(0), to kasuje też za każdym razem część (inną) divów.
Być może czegoś nie rozumiem i źle coś robię, w takim razie czego nie rozumiem? tongue.gif
kamil4u
Jak możesz to rozwiń to zdanie:
Kod
Kasuje to za każdym razem tą samą część divów. Gdy w pętli zrobię item(0), to kasuje też za każdym razem część (inną) divów.


Sam kod na pierwszy rzut oka wygląda ok smile.gif
nmts
Przed chwilą zbadałem sprawę dokładnie i wiem, że bez względu na ilość elementów w content_normal, zawsze kasuje dokładnie połowę tych elementów (no chyba, że nieparzysta ilość). MessagesA.length zwraca poprawną ilość elementów tablicy. Myślę, że to może być cenna wskazówka, ale ja nadal tego nie rozumiem. tongue.gif Dodatkowo jeśli w item(i), za i podstawie jakąś liczbę to kasuje też chyba połowę divów i nie widzę, żadnej zależności dlaczego akurat te, a nie te drugie. Rozumiem to tak, że jeden element tablicy jest odwołaniem do połowy divów, ale dlaczego tak jest? Może brzmi to dziwnie, ale nie zmyśliłem tego. winksmiley.jpg
kamil4u
Tak to jest jak się dokumentacji nie czyta (mówię o sobie smile.gif ): prawidłowy kod:
Kod
var content = document.getElementById('content_normal');
var messagesA = content.getElementsByTagName('div');
for(var i=0; i<messagesA.length; i++){
content.removeChild(messagesA[i--]);
}
lub
Kod
var content = document.getElementById('content_normal');
var messagesA = content.getElementsByTagName('div');
x = messagesA.length;
for(var i=0; i<x; i++)
{
content.removeChild(messagesA[0]);
}

2 sposób IMO lepszy smile.gif

I na szybko wyjaśniam - w chwili usuwania zmienia się ilość divów w zmiennej messagesA, podczas gdy i++ stale rośnie - ciężko to wyjaśnić - najlepiej popatrz co masz w zmiennych w każdym w kroku w pętli
nmts
Brawo, działa i nawet rozumiem. Sądziłem, że zawartość zmiennej jest stała i niezmienna.

Podam jeszcze trzecie rozwiązanie, wystarczy nie ikrementować: smile.gif
Kod
for(var i=0; i<messagesA.length; i){
   content.removeChild(messagesA.item(i));
}
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.