Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2002
    Messaggi
    74

    problema con firstChild

    Ciao a tutti,

    ho uno strano problema con il DOM, provo a spiegarlo:

    ho un html di questo tipo:


    <div id="primo">

    <div class="column">

    ....

    </div>

    </div>


    devo applicare uno stile al div interno tramite javascript e provo a farlo in questo modo:


    var first = document.getElementById( "primo" ).firstChild;

    first.style.background = "...";


    ma stranamente non funziona. Funziona solo su explorer, ma su firefox, safari ecc... dà errore.

    L'errore che vedo su Firefox è "first.style is undefined".

    L'unico modo in cui riesco a farlo a funzionare è applicare un id anche al div interno e richiamarlo direttamente tramite document.getElementById, ma siccome ho parecchi elementi di questo tipo, vorrei poter sfruttare gli elementi genitori.

    Qualcuno ha idea del perchè di questo errore?

    Grazie mille

  2. #2
    Utente di HTML.it L'avatar di Xinod
    Registrato dal
    Sep 2000
    Messaggi
    13,649
    se non andassi a capo nel codice (parlo proprio del markup dei div) funzionerebbe

    i browser moderni considerano nodi di testo (vuoti, ma pur sempre nodi) spazi e rimandi a capo nel codice
    il che vuol dire che il firstChild c'e', ma non e' un elemento, quindi cercare di settarne lo stile genera un errore

    risolvi valutando il nodeType del nodo in questione, se e' 1 hai a che fare con un elemento, altrimenti devi considerare il nextSibling finche' non diventa 1

    var first = getFirstChild(document.getElementById( "primo"));

    dove getFirstChild e' qualcosa del genere
    codice:
    function getFirstChild(el){
      while(el && el.nodeType!=1){
        el=el.nextSibling;
      }
      return el;
    }
    ciao

  3. #3
    Utente di HTML.it
    Registrato dal
    Nov 2002
    Messaggi
    74
    Ti ringrazio tantissimo, in effetti non ci avevo proprio pensato, si tratta in sostanza dello stesso problema del whitespace che si può incontrare con i file xml.

    Utilizzando infatti


    var first = document.getElementById( "primo" ).childNodes[1];


    funziona!

    Ma userò la funzione che mi ha suggerito che è molto utile.

    Grazie!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.