- From: Juriy Zaytsev <kangax.dev@gmail.com>
- Date: Sun, 20 Sep 2009 23:51:36 -0400
On Sep 20, 2009, at 10:29 PM, Garrett Smith wrote: > On Sun, Sep 20, 2009 at 2:47 PM, Michael A. Puls II > <shadow2531 at gmail.com> wrote: >> On Sun, 20 Sep 2009 16:15:11 -0400, Joseph Pecoraro <joepeck02 at gmail.com >> > >> wrote: >> >>> On Sep 20, 2009, at 3:57 PM, Michael A. Puls II wrote: >>>> >>>> I think it'd be cool to have to complement >>>> document.documentElement and >>>> document.body. >>> >>> On Sep 20, 2009, at 4: 00PM, Juriy Zaytsev wrote: >>>> >>>> Surely better than abominable ? >>>> `document.getElementsByTagName('head')[0]` :) >>> >>> I agree. Unfortunately that is the most popular method I've seen. >>> There >>> are better solutions, but they haven't caught on. I think a >>> smarter idea >>> would be to look at the children of the <html> element. Something >>> like this >>> almost always works: >>> >>> var head = document.documentElement.firstChild >> >> It wasn't very long ago though that in Opera for example, head wasn't >> guaranteed to be the first child of the documentElement. But, >> that'll work >> now and is pretty good. >> > > The documentElement.firstChild cannot be expected to be head. It could > be a text node. For example:- > > <html> > <head> > ... > > the first child node of HTML looks like a textNode with the value > "\n\n\u0020\u0020". > > document.getElementsByTagName("head")[0] could be expected to produce > (in a valid HTML document) a result that is more consistent than > document.firstChild. That was exactly my thought when `firstChild` was mentioned here first time. I was suspecting IE to return textnode but couldn't reproduce it in either 6, 7 or 8. I also tried inserting comment in between: <html> <!--// foo --> <head> ... but HEAD was still reported as first child. FWIW, looking at HTML's DTD, it seems that HEAD and BODY tags should always be in this exact order - <http://www.w3.org/TR/html4/struct/global.html#h-7.3 > -- kangax
Received on Sunday, 20 September 2009 20:51:36 UTC