[whatwg] document.head

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