document.documentElement or document.body

サンプルで作ったJavaScriptのクラスを、本番で試そうと思ったらうまく行かなかった。色々調べてみると、scrollTopの取得がサンプルではdocument.documentElementで取れていたのに、本番ではdocument.bodyでしか取れない。勿論同じブラウザ(IE6.0とFx1.5.0.4)で動かしている。
わけわからーん、と思っていたけど、HTMLの一番上にDOCTYPEの記述の有無で振る舞いが違うらしい。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

と書いておくとdocument.documentElementのscrollTopが有効でbodyの方はダメ。書かないと逆になる。
そういう仕様なんだろうなーと思って調べたらCSSのモードがあるのね・・・。知らなかったっす。

一般にHTMLの冒頭に以下のような宣言を加えるとスタイルシートが 標準モードになります。

他にも同工異曲の宣言が幾つもあり混乱します。。。
IE6では標準モードの場合、 「document.body」の属性取得で不適切な値が返されることがあります。


んでこれで判断するの?

document.compatMode=="CSS1Compat"

全部DOCTYPEを書いておいた方が楽な気がする。