Reputation: 22045
Will the DOM definitely be ready if I place my jquery code right before the </body>
tag?
I have some jquery code and when I put it in the $.ready() function I can see a flash of what the page looks like before the javascript code is run.
However, if I put the code right before the </body>
tag then I only see what the page looks like after the javascript is run. I used timers to see the time difference, and the code put before the end of the </body>
executed 300ms sooner than the code in $.ready.
EDIT:If the DOM is reliably ready when i call my code before the </body>
tag, what is the benefit to putting my code in $.ready, considering that my javascript will execute sooner if I put it before </body>
?
Upvotes: 1
Views: 269
Reputation: 1074525
Yes, the DOM is reliably ready at that point. This thread from the Google Closure Library mailing list may be of interest, although unfortunately as far as I know they haven't followed up with an actual article. Some quotes from Erik Arvidsson from that thread:
The short story is that we don't want to wait for DOMContentReady (or worse the load event) since it leads to bad user experience.
and (in relation to whether the DOM element immediately above a script element will really be there)
The DOM node is there and if you query for its size or something else that requires a reflow a reflow will happen so that the layout data is up to date.
Some further notes:
Upvotes: 2
Reputation: 3489
I'm 99% sure that it will work on the DOM that is in existance before the <script>
tag. This means that if it's before </body>
, it will work.
I'd be curious to see if it ever worked on something after the closing </script>
. Like maybe the internet loaded the page faster than the processor could begin the JavaScript code... I doubt it thought because if you do document.write, it should be at the same point where the <script></script>
is at.
Upvotes: 1
Reputation: 700402
Yes, the DOM is ready by then, but you still can't be sure that you don't see a flash of the page in it's original state.
If you have something that shouldn't be visible in the page from start, you can use CSS in a style sheet to hide it initially, instead of hiding it using jQuery. That way you will be sure that there will not be a flash of the elements before you have a chance to hide them.
Upvotes: 4