0

このコードを読み取ろうとしています。私が知る限り、子要素が「位置にある」かどうかをチェックしています(しかし、それは文字列と等しいですか?それは私には意味がありません)。そうでない場合はオフセットに 2 を追加し、そうである場合は何もしません。

  var p = document.getElementById(parent);
  var c = document.getElementById(child );

  var top  = (c["at_position"] == "y") ? p.offsetHeight+2 : 0;
  var left = (c["at_position"] == "x") ? p.offsetWidth +2 : 0;

そして、ここで、この for ループは私には意味がありません。なぜセミコロンで始まるのですか?

  for (; p; p = p.offsetParent)
  {
    top  += p.offsetTop;
    left += p.offsetLeft;
  }

これをもう少しよく読む方法を誰かが明確にすることはできますか? 親子の距離をある程度縮めるようにしています(「左」のみ)

4

1 に答える 1

3

ループしている間ptruethy、そうでpはありませnullん。offsetParentnull

それは以下と同等です:

var p = document.getElementById(parent);
while (p !== null) {
    top += p.offsetTop;
    left += p.offsetLeft;
    p = p.offsetParent;
}

通常、for ループは次のようになります。

for (var i = 0; i < array.length; i += 1) {

最初のビットvar i = 0は初期化部分です。次のように空のままにすることができます。

var i = 0;
for (; i < array.length; i += 1) {

これを行うこともできます:

for (var i = 0, j = 10 - i; i < array.length; i += 1, j -= 1) {

おそらくもっと良い方法がありますが。構文を示すだけです:)


2 番目の部分は、for ループtruethyの場合falseは停止する必要がある部分です。もちろん、これを空にすることはできません。


最後の部分はインクリメンタ部分で、空にすることもできます。したがって、次のことができます。

var p = document.getElementById(parent);
for (; p ;) {
    p = p.offsetParent;
}

奇妙に見えますが、機能します。奇妙に見えるので、これはお勧めしません。つまり、バグのように見えるということです。

于 2013-01-30T20:25:25.380 に答える