"The html element" (detailed review of the DOM)

(This is part of my detailed review of the Document Object Model section.)

document.dir is said to reflect the dir content attribute on "the html  
element".

    http://www.whatwg.org/specs/web-apps/current-work/#dir1


Some tests to figure out what IE does:

    http://software.hixie.ch/utilities/js/live-dom-viewer/?%3C%21DOCTYPE%20html%3E%0D%0A%3Cscript%3E%0D%0Avar%20e%20%3D%20document.createElement%28%22body%22%29%3B%0D%0Adocument.insertBefore%28e%2C%20document.documentElement%29%3B%0D%0Ae.appendChild%28document.createElement%28%22html%22%29%29%3B%0D%0Adocument.dir%3D%22ltr%22%3B%0D%0A%3C/script%3E  
(this one will probably hang IE7 if you do something)
    http://software.hixie.ch/utilities/js/live-dom-viewer/?%3C%21DOCTYPE%20html%3E%0D%0A%3Cscript%3E%0D%0Avar%20e%20%3D%20document.createElement%28%22foo%22%29%3B%0D%0Adocument.insertBefore%28e%2C%20document.documentElement%29%3B%0D%0Ae.appendChild%28document.createElement%28%22html%22%29%29%3B%0D%0Adocument.dir%3D%22ltr%22%3B%0D%0A%3C/script%3E
    http://software.hixie.ch/utilities/js/live-dom-viewer/?%3C%21DOCTYPE%20html%3E%0D%0A%3Cscript%3E%0D%0Avar%20e%20%3D%20document.createElement%28%22body%22%29%3B%0D%0Adocument.insertBefore%28e%2C%20document.documentElement%29%3B%0D%0Avar%20ee%20%3D%20document.createElement%28%22bar%22%29%3B%0D%0Ae.appendChild%28ee%29%3B%0D%0Aee.appendChild%28document.createElement%28%22html%22%29%29%3B%0D%0Adocument.dir%3D%22ltr%22%3B%0D%0A%3C/script%3E  
(also hangs IE7 after doing something)

Also try the same but with "frameset" instead of "body"...

In IE7, "the html element" is the first html element that doesn't have a  
body or frameset element ancestor. (IE won't let me replace or delete the  
last "html" element in the DOM so there will always be at least one  
present.)


For Opera:

    http://software.hixie.ch/utilities/js/live-dom-viewer/?%3C%21DOCTYPE%20html%3E%0D%0A%3Cscript%3E%0D%0Avar%20e%20%3D%20document.createElement%28%22body%22%29%3B%0D%0Adocument.replaceChild%28e%2C%20document.documentElement%29%3B%0D%0Ae.appendChild%28document.createElement%28%22html%22%29%29%3B%0D%0Adocument.dir%3D%22ltr%22%3B%0D%0A%3C/script%3E
    http://software.hixie.ch/utilities/js/live-dom-viewer/?%3C%21DOCTYPE%20html%3E%0D%0A%3Cscript%3E%0D%0Avar%20e%20%3D%20document.createElement%28%22foo%22%29%3B%0D%0Adocument.replaceChild%28e%2C%20document.documentElement%29%3B%0D%0Ae.appendChild%28document.createElement%28%22html%22%29%29%3B%0D%0Adocument.dir%3D%22ltr%22%3B%0D%0A%3C/script%3E
    http://software.hixie.ch/utilities/js/live-dom-viewer/?%3C%21DOCTYPE%20html%3E%0D%0A%3Cscript%3E%0D%0Avar%20e%20%3D%20document.createElement%28%22body%22%29%3B%0D%0Adocument.replaceChild%28e%2C%20document.documentElement%29%3B%0D%0Avar%20ee%20%3D%20document.createElement%28%22bar%22%29%3B%0D%0Ae.appendChild%28ee%29%3B%0D%0Aee.appendChild%28document.createElement%28%22html%22%29%29%3B%0D%0Adocument.dir%3D%22ltr%22%3B%0D%0A%3C/script%3E
    http://software.hixie.ch/utilities/js/live-dom-viewer/?%3C%21DOCTYPE%20html%3E%0D%0A%3Cscript%3E%0D%0Avar%20e%20%3D%20document.createElementNS%28%22http%3A//www.w3.org/1999/xhtml%22%2C%22foo%22%29%3B%0D%0Adocument.replaceChild%28e%2C%20document.documentElement%29%3B%0D%0Avar%20ee%20%3D%20document.createElement%28%22bar%22%29%3B%0D%0Ae.appendChild%28ee%29%3B%0D%0Aee.appendChild%28document.createElement%28%22html%22%29%29%3B%0D%0Adocument.dir%3D%22ltr%22%3B%0D%0A%3C/script%3E
    http://software.hixie.ch/utilities/js/live-dom-viewer/?%3C%21DOCTYPE%20html%3E%0D%0A%3Cscript%3E%0D%0Avar%20e%20%3D%20document.createElementNS%28%22http%3A//www.example.org/foo%22%2C%22foo%22%29%3B%0D%0Adocument.replaceChild%28e%2C%20document.documentElement%29%3B%0D%0Avar%20ee%20%3D%20document.createElement%28%22bar%22%29%3B%0D%0Ae.appendChild%28ee%29%3B%0D%0Aee.appendChild%28document.createElement%28%22html%22%29%29%3B%0D%0Adocument.dir%3D%22ltr%22%3B%0D%0A%3C/script%3E

In Opera, document.dir reflects the dir attribute on the root element,  
unless the root element is a non-HTML element. (Opera won't let me remove  
the last element in the DOM so there will always be at least one root  
element present.)


For Firefox and Safari:

    http://software.hixie.ch/utilities/js/live-dom-viewer/?%3C%21DOCTYPE%20html%3E%3Cscript%3Edocument.dir%3D%22rtl%22%3Bw%28document.dir%29%3C/script%3Etest
    http://software.hixie.ch/utilities/js/live-dom-viewer/?%3C!DOCTYPE%20html%3E%3Chtml%20dir%3Drtl%3E%3Cscript%3Edocument.dir%3D%22ltr%22%3Bw(document.dir)%3C/script%3Etest

In Firefox, document.dir doesn't reflect any content attribute, but it  
does affect rendering. Getting document.dir returns the Document's  
direction.

In Safari, setting document.dir doesn't do anything and getting always  
returns the empty string.


Now, I suggest that the definition of "the html element" be changed to  
match what IE does, i.e.:

    The html element of a document is the first html element that doesn't
    have a body or frameset element ancestor, if there is one, or null
    otherwise.

-- 
Simon Pieters
Opera Software

Received on Wednesday, 25 July 2007 08:47:50 UTC