日期:2014-05-16  浏览次数:20310 次

关于在while循环中判断的奇怪问题,“=”和“==”
本帖最后由 ahking 于 2013-03-05 14:33:22 编辑

 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的父元素,显然不是。