我正在尝试阅读此代码。据我所知,它正在检查子元素是否处于“位置”(但它等于一个字符串?这对我没有意义)。如果不是,则将偏移量加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;
}
任何人都可以澄清如何更好地阅读这一点吗?我试图在有限的范围内缩小父母和孩子之间的距离(仅限“左”)
答案 0 :(得分:3)
当p
为truethy
时,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。