var obj = document.getElementById(id);
var cen = document.getElementById("myDiv");
// 获得元素的左偏移量
var left = obj.offsetLeft;
// 获得元素的顶端偏移量
var top = obj.offsetTop;
// 循环获得元素的父级控件,累加左和顶端偏移量
//如果用 while (obj == obj.offsetParent),就不能得到正确位置
while (obj = obj.offsetParent) {
left += obj.offsetLeft;
top += obj.offsetTop;
}
// 设置层的坐标并显示
cen.style.left = left + "px";
// 层的顶端距离为元素的顶端距离加上元素的高
cen.style.top = top + el.offsetHeight + "px";
问题可能出在哪呢?
------解决方案--------------------
你之前的obj指向这个
var obj = document.getElementById(id);
现在指向这个,也就是他的父元素
while (obj = obj.offsetParent)
上面相当于重置obj为父元素
obj等于他的父元素肯定不成立
------解决方案--------------------
..=是赋值 ==是判断 obj == obj.offsetParent肯定是false 当然不执行~
------解决方案--------------------
=是复值 如果obj.offsetLeft不为空 while里的值永远都是ture
------解决方案--------------------
obj.offsetLeft不为空
这个条件是有点问题,我可以换成父对象不为空吧。
------解决方案--------------------
while (obj = obj.offsetParent)
这句代码不是单纯的比较或者赋值。它分为两步,第一步是将obj.offsetParent赋值给obj,第二步则是判断obj是否为空。在while或者if的条件里,这样的用法还是挺常见的。如果把=换成==,则变成了仅仅判断obj是否是obj的父元素,显然不是。