.load() i DOMContentLoaded

0

Cześć :D
Zauważyłem że gdy na początku deklaruję zmienną:
(tak tak wiem że zmienna globalna)

twojaStara = document.getElementsByTagName("body")[0];

to zmienna twojaStara ma wartość null.
Ale gdy zrobię to tak:

document.addEventListener('DOMContentLoaded', function() {
	twojaStara = document.getElementsByTagName("body")[0];
});

lub tak:

$(document).ready(function() {
  twojaStara = document.getElementsByTagName("body")[0];
});

to wszystko wczytuje się jak należy. I naszło mnie pytanie:
Kiedy należy używać, a kiedy nie należy tych dwóch powyższych funkcji ?

0

dokument wczytuje sie pokolei tak jak jest w kodzie
jak masz jsa wrzuconego w head to on sie wczyta i bedzie probowal w tamtej chwili chwycic element zanim on w ogole bedzie istnial. Dlatego albo jsa dajesz na sam dol, tuz przed zamknieciem znacznika body albo dajesz funkcje, ktora wywoluje sie dopiero po wczytaniu calego dokumentu

0

Kod JS uruchamiany jest w momencie napotkania go w DOMie przez parser - czyli jeśli masz następujący dokument:

<script>
  /* ... */
</script>

<body>
  <!-- ... -->
</body>

... to JS odpali się zanim body będzie przetworzone, stąd w takim wypadku musisz skorzystać ze zdarzenia DOMContentLoaded (lub przenieść script na sam dół strony).

Różnica między $(document).ready a document.addEventListener('DOMContentLoaded', ...) polega na tym, że jedno wymaga do działania jQuery, a drugie nie ;-)

Pod spodem jQuery tak czy siak podpina się pod DOMContentLoaded.

0

Bardzo interesujące. :-)
A czy ktoś z was używa:

<head>
    <script src="skrypcik.js" async="true"></script>
</head>

?
Bo podobno w ten sposób można też rozwiązać ten problem.

0

async powoduje odpalenie skryptu w tle, jednak wcale nie jest powiedziane, że czeka na załadowanie DOM.

Edit: prawdopodobnie chodzi Ci o defer.

0

Ale co to znaczy że skrypt jest odpalony w tle? Po co się w takim razie używa async ?

0

I tak lepiej skrypty (a nawet cssy skryptami) ladowac na samym koncu zeby wlasciwa strona (tekst) wczytala sie szybciej

1 użytkowników online, w tym zalogowanych: 0, gości: 1