Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it L'avatar di Igreo
    Registrato dal
    Jun 2004
    Messaggi
    1,114

    Metodo crossbrowser per id

    Sto cercando di fare uno script che mi aiuti tutte quelle volte che devo cercare un id.
    Il metodo mi serve per ovviare a tutte le domande per il crossbrowser ogni qual volta devo richiamare un id.
    Ho fatto qualcosa che con Mozilla e IE (ultime versioni) funziona, ma nel controllo degli script di Mozilla c'è un messaggio d'errore, cioè che il metodo non è in prospettiva DOM in cui si deve usare il metodo getElementById().

    Ecco lo script:
    Codice PHP:
        var doc;
    if (
    document.alldocdocument.all;
    if (
    document.layersdocdocument.layers;
    if (
    document.getElementByIddocdocument.getElementById;
    docid//in questo caso id sarebbe il nome dell'ID, ma senza le virgolette, dichiarato come variabile.
    //es. a seguire di una chiamata
    doc.innerHTML"etc.etc."
    quindi la domanda è... cosa ne pensate? Inoltre questo script funziona anche per gli altri due metodi (all e layers)?

    Grazie infinite!

  2. #2
    usa
    document.getElementById
    e basta.

    document.layers è per quel dinosauro di netscape 4 che non esiste più da quel dì - e se qualche utente lo usa, non è un' utenza che vale la pena tenere.
    quanto a document.all lo usa solo ie4 ormai (e per backward compatibility anche le versioni uccessive, che però leggono tutte anche e soprattutto document.getElementById), e non credo esistano più macchine con ie4 visto che c'è l'update automatico.

    ps
    doc=id
    non ha proprio senso.

  3. #3
    Utente di HTML.it L'avatar di Igreo
    Registrato dal
    Jun 2004
    Messaggi
    1,114
    ...provalo e vedrai che lo script funziona!

  4. #4
    non ci siamo capiti - lo so che funziona, non ho bisogno di provarlo :-)
    Hai chiesto un parere - il parere è che indipendentemente dalla funzionalità, ti merita usare solo
    document.getElementById

    ps la espressione div=id non ha senso, per come la hai spiegata: assegnare ad una variabile il valore stringa di una altra variabile e poi su quello invocare una proprietà che non appartiene all' oggetto Stringa, non ha senso.
    ciao

  5. #5
    Utente di HTML.it L'avatar di Igreo
    Registrato dal
    Jun 2004
    Messaggi
    1,114
    il senso è che

    if doc è = a document.getElementById,
    doc è relativamente = anche a id, che è appunto un id del documento.


  6. #6
    boh se a te piace leggere quella cosa così, libero di farlo.
    In realtà un id è una stringa, e lo stesso id preso attraverso document.getElementById(id) è un oggetto.

    togli quella cosa
    div=id
    nel contesto di quella "funzione", non si capisce cosa sia id.

  7. #7
    ps
    comunque se
    doc= document.getElementById;
    allora
    doc.innerHTML= "etc.etc.";
    è sbagliato.

    Dire
    doc= document.getElementById;
    significa che la variabile doc è adesso un puntatore al metodo DOM getElementById.
    Da quel momento in poi opera come alias, ma per operare deve agire come funzione ovvero:
    doc('unIdqui')
    e solo allora ha senso
    doc('unIdqui').innerHTML= "etc.etc.";

  8. #8
    Utente di HTML.it L'avatar di Igreo
    Registrato dal
    Jun 2004
    Messaggi
    1,114
    Non credo funzioni..

  9. #9
    guarda non ti sto esprimendo un mio parere personale: ti sto dicendo come stanno le cose.

    Apparentemente hai creato una tua procedura per verificare come prelevare un getElementById, e capisco che se sei alle prime armi la cosa ti abbia dato soddisfazione. Ma bisogna che decidi se sei qui per esibire un prodotto o per migliorarlo. Se lo vuoi migliorare, i "miei" consigli sono validi, perchè non sono appunto "miei" ma esprimono la funzionalità di javascript.

    Te lo dimostro: con il tuo codice non funziona:

    codice:
    <div id="miodiv" style="border:#000000 1px solid; padding:10px;">ciao</div>
    
    <script>
    function foo(id){
    var doc;
    if (document.all) doc= document.all;
    if (document.layers) doc= document.layers;
    if (document.getElementById) doc= document.getElementById;
    doc= id; //in questo caso id sarebbe il nome dell'ID, ma senza le virgolette, dichiarato come variabile.
    //es. a seguire di una chiamata
    doc.innerHTML= "etc.etc.";
    }
    foo('miodiv');
    </script>
    Questo invece funziona, e non è una opinione:
    codice:
    <div id="miodiv" style="border:#000000 1px solid; padding:10px;">ciao</div>
    
    <script>
    function foo(id){
    document.getElementById(id).innerHTML= "etc.etc.";
    }
    foo('miodiv');
    </script>
    Quello che ti sto dicendo è che se proprio vuoi usare la tua procedura (che non funziona) quello che stai facendo è di creare un puntatore ad una funzione nativa di javascript:

    codice:
    <div id="miodiv" style="border:#000000 1px solid; padding:10px;">ciao</div>
    
    <script>
    function foo(id){
    	var doc=document.getElementById;
    alert(doc);//è un puntatore e l'alert lo dimostra
    }
    foo('miodiv');
    </script>
    da quel momento in poi, la tua procedura avrebbe un senso se tu usassi quel puntatore come funzione, anche se javascript può rifiutare la assegnazione della funzionalità ad un puntatore su un metodo nativo del DOM - cioè avrebbe un senso se poi piuttosto che tentare
    doc.innerHTML
    che sicuramente è privo di significato, tu avessi tentato
    doc(id).innerHTML
    che non ti funziona uguale, ma almeno sarebbe stato concettualmente più corretto.

    Oppure, invochi il metodo completo (cioè crei un puntatore ad un oggetto dom, ma non ad un metodo):
    codice:
    <div id="miodiv" style="border:#000000 1px solid; padding:10px;">ciao</div>
    
    <script>
    function foo(id){
    	var doc=document.getElementById(id);
    doc.innerHTML='etc. etc.';
    }
    
    foo('miodiv');
    </script>
    In altre parole, ricadi nel mio consiglio originario: usa
    document.getElementById(idqui)
    oppure aggiungi le parentesi - ma lascia stare il resto cioè cose come
    doc=document.getElementById (layers/all o quel che sia)
    e cose come
    doc=id

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.