Witaj na Zine.net online Zaloguj się | Rejestracja | Pomoc

Firefox, DOM i textNode revisited

Jeżeli ktoś czytał mój poprzedni wpis w blogu to wie, że ostatnio mocowałem się z firefoxem i javascript'em. Myślałem, że to koniec moich kłopotów. Ale miałem jeszcze jeden problem z opisywanym wcześniej firstChild. Ale od początku.

Taki xml

<table>
    <tr>
        <td>cos</td>
    </tr>
</table>


będzie w d DOM Insectorze widziany tak:
1. Element table
2. TextNode reprezentujący białe znaki
3. Element tr
4. TextNode reprezentujący białe znaki
5. Element td
... itd.

W momencie kiedy dla elementu table będziemy chcieli wyciągnąć właściwość firstChild dostaniemy: w IE element tr, w Firefoxie TextNode.

Problemu nie będzie jeżeli powyższy xml/html będzie wyglądał np. tak:

<table
    ><tr
        ><td>cos</td
    ></tr
></table>

Lekko 'obrzydliwe'. Można też całkowicie wyrzucić białe znaki i znaki nowej linii.

Więc jak szybko przejść do szukanego elementu w js? Wystarczy zawołać:

tableEl.firstChild.nextSibling

który przejdzie do kolejnego elementu.

Ale nie mamy pewności, że kolejnym elementem na pewno będzie szukany przez nas <tr> (może jakiś komentarz się trafi). Jak rozpoznać że dany element jest textNode'm. Pierwsze moje podejście było jak poniżej:

if (tableEl.firstChild.construcor == Text)

(lub też Element jak kto woli). Trafiłem chwilę później na ciekawą listę. Okazuje się, że każdy element ma właściwość nodeType:

1    Element Node
2    Attribute Node
3    Text Node
4    CDATA Section Node
5    Entity Reference Node
6    Entity Node
7    Processing Instruction Node
8    Comment Node
9    Document Node
10    Document Type Node
11    Document Fragment Node
12    Notation Node

Ponieważ operacje robiłem w pętli, wystarczyło coś takiego:

       
for (var k = thisRow.nextSibling; k != null; k = k.nextSibling)
{
     // jeżeli to nie Element to idziemy dalej
     if (k.nodeType != 1)
          continue;
     /* tutaj robię co trzeba */
}


Mam nadzieję, że komuś się przyda
Opublikowane 6 kwietnia 2007 14:29 przez yoshi
Filed under: , ,

Powiadamianie o komentarzach

Jeżeli chciałbyś otrzymywać email gdy ta wypowiedź zostanie zaktualizowana, to zarejestruj się tutaj

Subskrybuj komentarze za pomocą RSS

Komentarze:

# re: Firefox, DOM i textNode revisited

7 kwietnia 2007 12:11 by dario-g

hehe, kurcze, ostatnio to samo szukałem po sieci do mojego pseudo captcha i dokładnie to samo rozwiązanie zastosowałem :)

# re: Firefox, DOM i textNode revisited

7 kwietnia 2007 12:32 by yoshi

i teraz mi kurcze mówisz? :)

# re: Firefox, DOM i textNode revisited

10 sierpnia 2008 13:36 by Jerronimo

Ja szukam sposobu jak wypierdzielic te wszystkie text nody z domu ;)

Co o tym myślisz?

(wymagane) 
wymagane 
(wymagane) 

  
Wprowadź kod: (wymagane)