すぎたです。

In message news:20040325001829.5300007.1062544894@uranus.interq.or.jp
"笠原 励(氷炎 雷光風)" <cuncuku@uranus.interq.or.jp> wrote ...

> >   var b = (document.all && (document.compatMode == undefined || document.compatMode == "BackCompat"))
> >             ? document.body : document.documentElement;
> > 
> > の方が良いかもしれません。(IEなら、document.body.scrollTop でも十分かも)

> 互換モードを条件に入れての判定のように思うのですが、

条件としては、IE であり、かつ、互換モードの場合、document.body、
そうでない場合は document.documentElement を b に代入しています。

? : は条件演算子、または三項演算子と呼ばれるもので、
  v = e ? x : y;
は
  if (e)
    v = x;
  else
    v = y;
とほぼ同等です。ほぼというのは、
  v = if (e) x else y;
という記述は出来ない(はず。試してないです(^^;;)という意味です。

if 文で細かく分解して書くと、

  if (document.all) { // IE
    if (document.compatMode == undefined) { // IE4.x, IE5.x
      b = document.body;
    } else if (document.compatMode == "BackCompat") { // IE6 互換モード
      b = document.body;
    } else { // IE6 標準モード
      b = document.documentElement;
    }
  } else { // { NN7, Opera7 }等の、IE 以外の「標準モード」
           //                      IE 以外の「互換モード」は考慮せず
      b = document.documentElement;
  }

となり、同じ値について条件をまとめると、IE については、
compatMode が undefined または(OR、JavaScriptでは||)
"BackCompat" ならば body ですので、これらの条件を A とおくと、
  IE であり、かつ(AND、JavaScriptでは&&) A が真であれば body
  IE であり、かつ A が偽であれば documentElement
  IE でなければ、documentElement
となって、body の条件が IE であり、かつ A が真のときで、
それ以外は documentElement となるので、
全てを繋げて、
  if (IE && A)
    b = body;
  else
    b = documentElement
となり、展開すると
  var b;
  if (document.all && ((document.compatMode == undefined) || (document.compatMode == "BackCompat")))
    b = document.body;
  else
    b = documentElement;
となります。
var b に直接代入するため 式1(条件) ? 式2 : 式3 を用いていますが、
わかりやすいと思う記述を選択すれば良いかと思います。
(三項演算子は、結果を演算式(代入含む)に利用する場合に用います)


> で、こうすることによるメリットというのは、どういうことでしょうか?

条件の意味ということであれば、IE5.5sp2 で(たぶん IE5 でも)動作します。
三項演算子のメリットというのは、あまり無いです。
(あえて言えば、var b を分離せずに記述している点)

で、IE の場合、標準か互換かの区別なく、document.body.scrollTop
を参照すれば値は取得できるので、
document.body.scrollTop が定義されていればそちらを、そうでなければ
document.documentElement を用いるように、
  var b = (document.body.scrollTop == undefined ? document.documentElement : document.body);
でも良いかもしれません。
ただ、標準モードであることを意識する意味を込めるのであれば、
document.documentElement を参照するのも手かなということで、
先の条件にした次第です。


> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

これだと、互換モードなので、IE 以外では不都合がある場合があると
思います。ただし、これも確認はしていません。
互換モードを利用するのであれば、それを意識したプログラムの方が
良いと思います。


> 「今回のケースではあまり意味を持ちません」というのは、
> どういう意味でしょう?今1つピンと来ません。

今回例示された2つのページについては、ウィンドウの高さ 100%
の中で div にスクロールバーを持たせているので、どちらの場合も
body 自体はスクロールしませんよね。
なので、scrollTop は変化せず、スクリプト自体は動いていても、
実際に left 部の移動は発生しないないので、スクリプトを
動かさなくても同じという意味です。
スタイルシートに未対応(対応の仕方が異なるとか)でスクリプト
には対応している場合は意味があると思いますが、結構ややこしい
話になるので、スクリプトは更に複雑になると思います。
(NN4.xに対応しようと思うと…私なら諦めるかも)

-- 
杉田
sugi-nws@bk.iij4u.or.jp