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

它是循环的,p也就是说truethyp不是null因为一旦你到达顶峰offsetParent就可能会。null

它相当于:

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) {

尽管可能有更好的方法来做到这一点。只是向您展示语法:)


第二部分是必须的部分truethy,如果false是 for 循环将停止。这当然不能为空。


最后一部分是增量部分,也可以为空。所以你可以有:

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

它看起来很奇怪,但有效。我不推荐这个,因为它看起来很奇怪,我的意思是它看起来像一个错误。

于 2013-01-30T20:25:25.380 回答