首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > JavaScript >

关于在while循环中判断的奇怪有关问题,“=”和“==”

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

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

热点排行