Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 14
  1. #1

    DOM Ottenere elemento successivo

    Ciao ho questa situazione:

    codice:
    <div>
    <span id="aa">Title</span>
    <div>
    <span>Element</span>
    <span>Element</span>
    <span>Element</span>
    </div>
    <span id="bb">Title</span>
    <div>
    <span>Element</span>
    <span>Element</span>
    <span>Element</span>
    </div>
    </div>

    Vorrei ottenere il primo DIV sotto id="bb"... come posso fare?
    Are you alive?
    No, but I was written with LOVE. A new scripting language.
    www.frequenze.it

  2. #2
    Utente di HTML.it L'avatar di Xinod
    Registrato dal
    Sep 2000
    Messaggi
    13,649
    se tu sei certo che il div sia l' elemento che immediatamente segue "bb" basta questo
    codice:
    el=document.getElementById('bb');
    do{el=el.nextSibling} while(el.nodeType!=1);
    
    // el ora fara' riferimento all' elemento successivo, x es: nasconde il div
    el.style.display='none';
    ciao

  3. #3
    o più in generale usi tagName

    codice:
    el=document.getElementById('bb');
    do{el=el.nextSibling} while(el.tagName !== "div");
    
    // el ora fara' riferimento all' elemento successivo, x es: nasconde il div
    el.style.display='none';
    ciao
    sergio

  4. #4
    Originariamente inviato da mondobimbi
    o più in generale usi tagName
    Semmai più nello specifico

  5. #5
    no, il "generale" stava nel fatto che non presume che il primo non testo sia necessariamente un div .
    ciao
    sergio

  6. #6
    Utente di HTML.it L'avatar di Xinod
    Registrato dal
    Sep 2000
    Messaggi
    13,649
    un paio di cose da notare:
    tagName restituisce il nome del tag in maiuscolo, quindi devi cercare "DIV",
    oppure, secondo logica, valutare il lowerCase del tagName e qui troverai un intoppo che ti mostra perche' mi preoccupo prima di tutto del nodeType

    while(el.tagName.toLowerCase() !== "div");

    secondo il DOM standard spazi bianchi, tab, carriage return... sono nodi di testo, vuoti
    e quanto sopra generera' errori, perche' il lowerCase di un undefined genera un errore,
    che non ti aspetteresti

    lo so che sto estremizzando la situazione ma, in contesti leggermente piu' complessi, occorre prestarvi attenzione
    ciao

  7. #7
    no, non hai estremizzato, ho dato una risposta affrettata.
    Puoi fare il controllo
    if (el.tagName) {.....}
    per verificare prima se è null
    oppure
    codice:
    el=document.getElementById('bb');
    do{el=el.nextSibling} while(el.nodeType != -1 && el.tagName.toLowerCase() !== "div");
    
    // el ora fara' riferimento all' elemento successivo, x es: nasconde il div
    el.style.display='none';
    ciao
    sergio

  8. #8
    Intanto grazie per le risposte. Il codice riportato qui sotto funziona bene su tutti i browser tranne che su IE, pare che IE abbia un DOM differente... come posso correggere il codice per renderlo cross brower?

    Grazie.

    codice:
    <html>
    <head>
    <script type="text/javascript">
    
    function hidden(){
        var el=document.getElementById('qq').nextSibling;
        do{el=el.nextSibling} while(el.nodeType != -1 && el.tagName.toLowerCase() !== "div");
        el.style.display='none';
    }
    
    </script>
    </head>
    <body>
    
    <div id="qq">Click here</div>
    <div id="vv">Hide this</div>
    
    </body>
    </html>
    Are you alive?
    No, but I was written with LOVE. A new scripting language.
    www.frequenze.it

  9. #9
    Utente di HTML.it L'avatar di Xinod
    Registrato dal
    Sep 2000
    Messaggi
    13,649
    codice:
    function hidden(){
        var el=document.getElementById('qq');
        do{el=el.nextSibling} while(el.nodeType !=1 || el.tagName.toLowerCase()!='div');
        el.style.display='none';
    }
    ciao

  10. #10
    Grazie, con uno switch IE vs. resto del mondo funziona bene. Mi sapresti spiegare perche`? Faccio un sacco di fatica a scrivere JS per IE e non ne capisco il motivo.
    Are you alive?
    No, but I was written with LOVE. A new scripting language.
    www.frequenze.it

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 © 2025 vBulletin Solutions, Inc. All rights reserved.