2012-06-22 18 views
11

Ho una semplice pagina HTML senza codice nel tag del corpo. Voglio inserire l'html nel tag body tramite javascript.Impossibile impostare la proprietà InnerHTML di null

Il mio file javascript è simile a questo.

var Global={ 
    UserWall:function(){ 
      return "a very long html code"; 
    } 
}; 

    var globalObject=Object.create(Global); 
    document.getElementsByTagName("body").item(0).innerHTML=globalObject.UserWall(); 

Ora voglio questo codice html molto lungo da inserire automaticamente nel tag body sul caricamento della pagina. Ma mi sta dando l'errore che ho menzionato nel titolo. Perché?

e anche questo è il modo corretto di creare un sito Web basato su jax (senza ricaricare la pagina), il che significa che se avessi chiamato script lato server per aggiornare questo codice html molto lungo e aggiunto al corpo della pagina.

risposta

49

Si è quasi certamente esegue il codice prima il DOM è costruito. Provare a eseguire il codice in una funzione di gestione window.onload (ma vedi nota sotto):

window.onload = function() { 
    // all of your code goes in here 
    // it runs after the DOM is built 
} 

Un altro popolare soluzione cross-browser è quello di mettere il blocco <script> poco prima della chiusura </body> tag. Questa potrebbe essere la soluzione migliore per voi, a seconda delle esigenze:

<html> 
    <body> 

    <!-- all of your HTML goes here... --> 

    <script> 
     // code in this final script element can use all of the DOM 
    </script> 
    </body> 
</html> 
  • Nota che window.onload attenderà fino a quando tutte le immagini ei controtelai hanno caricato, che potrebbe essere un lungo periodo di tempo dopo che il DOM è stato costruito. Potresti anche utilizzare document.addEventListener("DOMContentLoaded", function(){...}) per evitare questo problema, ma questo non è supportato dal browser. Il trucco bottom-of-body è sia cross-browser che viene eseguito non appena il DOM è completo.
+0

thnx per la spiegazione ha funzionato bene. – Mj1992

+0

hey puoi dirmi che questo è il modo giusto per sviluppare l'applicazione Ajax aggiungendo il testo al corpo in fase di runtime? – Mj1992

+0

Risposta perfetta! – Chip

0

forse questo lavoro: document.getElementsByTagName("body")[0].innerHTML

+0

non funziona .... – Mj1992

4

È questo correre nel <head> del HTML? In tal caso, devi assicurarti che il tag <body> sia stato effettivamente caricato per primo.

è necessario utilizzare un gestore onload, ad esempio: http://javascript.about.com/library/blonload.htm

+0

è in esecuzione in uno script esterno – Mj1992

+0

Non importa. _Quando_ stai caricando? Se è incluso nel tag '', viene comunque eseguito immediatamente. – TheZ

+0

è incluso nel tag head – Mj1992

5

Ho fatto tutte le soluzioni menzionate qui. ma non ha funzionato fino a quando ho fatto questo utilizzando jQuery:

nella mia pagina HTML:

> <div id="labelid" > </div> 

e quando clicco su un pulsante, ho messo questo nel mio file JS:

$("#labelid").html("<label>Salam Alaykom</label>"); 
Problemi correlati