Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [javascript] kasowanie elementów
nmts
post
Post #1





Grupa: Zarejestrowani
Postów: 283
Pomógł: 34
Dołączył: 21.03.2008

Ostrzeżenie: (0%)
-----


  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? (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif)

Ten post edytował nmts 16.07.2009, 18:44:17
Go to the top of the page
+Quote Post
kamil4u
post
Post #2





Grupa: Zarejestrowani
Postów: 2 350
Pomógł: 512
Dołączył: 4.01.2009
Skąd: Wrocław / Świdnica

Ostrzeżenie: (0%)
-----


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 (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
nmts
post
Post #3





Grupa: Zarejestrowani
Postów: 283
Pomógł: 34
Dołączył: 21.03.2008

Ostrzeżenie: (0%)
-----


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. (IMG:http://forum.php.pl/style_emoticons/default/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. (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)

Ten post edytował nmts 16.07.2009, 19:11:39
Go to the top of the page
+Quote Post
kamil4u
post
Post #4





Grupa: Zarejestrowani
Postów: 2 350
Pomógł: 512
Dołączył: 4.01.2009
Skąd: Wrocław / Świdnica

Ostrzeżenie: (0%)
-----


Tak to jest jak się dokumentacji nie czyta (mówię o sobie (IMG:http://forum.php.pl/style_emoticons/default/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 (IMG:http://forum.php.pl/style_emoticons/default/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
Go to the top of the page
+Quote Post
nmts
post
Post #5





Grupa: Zarejestrowani
Postów: 283
Pomógł: 34
Dołączył: 21.03.2008

Ostrzeżenie: (0%)
-----


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ć: (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Kod
for(var i=0; i<messagesA.length; i){
   content.removeChild(messagesA.item(i));
}
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 23.08.2025 - 22:37