2012-06-22 19 views
11

Mam prostą stronę html bez kodu w tagu treści. Chcę wstawić html w tagu body przez javascript.Nie można ustawić właściwości InnerHTML o wartości zerowej

Mój plik javascript wygląda tak.

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

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

Teraz chcę, aby ten bardzo długi kod HTML został automatycznie wstawiony do znacznika body przy ładowaniu strony. Ale to daje mi błąd, o którym wspomniałem w tytule. Dlaczego?

, a także czy jest to poprawny sposób tworzenia witryny ajaxowej (bez przeładowywania strony), co oznacza, że ​​gdybym wywołał skrypt po stronie serwera, zaktualizował ten bardzo długi kod HTML i dołączył go do treści strony.

Odpowiedz

49

Jesteś prawie na pewno uruchomiony kod przed DOM jest wykonana. Spróbuj uruchomić swój kod w window.onload funkcji obsługi (ale patrz uwaga poniżej):

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

Innym popularnym rozwiązaniem cross-browser jest umieścić blok <script> tuż przed zamykającym </body> tagu. To może być najlepszym rozwiązaniem dla Ciebie, w zależności od potrzeb:

<html> 
    <body> 

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

    <script> 
     // code in this final script element can use all of the DOM 
    </script> 
    </body> 
</html> 
  • Uwaga że window.onload będzie czekać, aż wszystkie obrazy i ramy pomocnicze zostały załadowane, które mogą być długo po DOM jest zbudowany. Możesz także użyć document.addEventListener("DOMContentLoaded", function(){...}), aby uniknąć tego problemu, ale nie jest to obsługiwane w różnych przeglądarkach. Sztuczka dolnej części ciała jest zarówno przeglądarką, jak i działa zaraz po ukończeniu DOM.
+0

thnx za wyjaśnienie sprawdziło się. – Mj1992

+0

Hej, czy możesz mi powiedzieć, że jest to właściwa droga do opracowania aplikacji ajaxowej poprzez dołączenie tekstu do ciała w czasie wykonywania? – Mj1992

+0

Doskonała odpowiedź! – Chip

0

może to będzie działać: document.getElementsByTagName("body")[0].innerHTML

+0

nie działa .... – Mj1992

4

Czy to działa w <head> w html? Jeśli tak, musisz najpierw upewnić się, że znacznik <body> został załadowany.

Musisz użyć programu obsługi onload, na przykład: http://javascript.about.com/library/blonload.htm

+0

działa w zewnętrznym skrypcie – Mj1992

+0

Nie ma znaczenia. Kiedy go ładujesz? Jeśli jest zawarty w tagu '', nadal działa natychmiast. – TheZ

+0

jest zawarty w tagu głowy – Mj1992

5

Zrobiłem wszystkie wymienione tutaj rozwiązania. ale nie działa aż zrobiłem to jeden jQuery:

na mojej stronie HTML:

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

i po kliknięciu na przycisku, mogę umieścić w moim pliku JS:

$("#labelid").html("<label>Salam Alaykom</label>"); 
Powiązane problemy