试图阅读这个Javascript循环

时间:2013-01-30 20:23:10

标签: javascript html

我正在尝试阅读此代码。据我所知,它正在检查子元素是否处于“位置”(但它等于一个字符串?这对我没有意义)。如果不是,则将偏移量加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;
  }

任何人都可以澄清如何更好地阅读这一点吗?我试图在有限的范围内缩小父母和孩子之间的距离(仅限“左”)

1 个答案:

答案 0 :(得分:3)

ptruethy时,p不是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;
}

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