IE8でDOCTYPEを書かずにgetElementByIdを使った場合の挙動

久しぶりの日記です。


仕事で情報処理してると色々な場面がありますよね。
自分じゃ絶対使わないけど、IEでの挙動を確かめなければいけなかったり。
そして、そんなIEを使ってる時に遭遇した問題に関して一言。


http://d.hatena.ne.jp/seiunsky/20100209/1265691289


IE7までは、なぜかJavascriptのdocument.getElementById('hoge')となると、name="hoge"のDOMが取得されてしまう残念仕様がありました。
しかし、IE8ではこれがようやく修正されました。


……が、ちょっとばっかりIE7以前の挙動が再現する例を発見しました。
それが、HTMLのDOCTYPE宣言を行わない場合です。
上記リンクのhtmlのDOCTYPE宣言を消したhtmlに対して処理を行うと、残念ながらnameと一致するものが取得されてしまいます(nameの文字が表示される。IE8/WinXPおよび7で確認/FireFoxではきちんとidが表示されます)。


推測ではDOCTYPE宣言が無いHTMLを読み込む場合、古いHTMLにはDOCTYPE宣言が無いものが多かったことから、IE8の互換モードが自動的にIE7の互換モードとしてHTMLファイルを読み込んでしまい、結果としてIE7以前の仕様のjavascriptが実行されるのではないかと思います。


まあ、DOCTYPE書けって話なんですが、ちょっとはまってしまったので忘備録に。