is_thinking 2015-08-22 01:20 采纳率: 66.7%
浏览 5573
已采纳

用offsetLeft为什么输出的是0

 <style>
 #div1 {
    width:500px;
    height:500px;
    margin-left:100px;
    border:solid 1px black;
 }
 #div2 {
     width:300px;
     height:300px;
     margin-left:50px;
     border:solid 1px red;
 }
 </style>
 <body>
    <div id="div1">
        <div id="div2">
        </div>
    </div>
 </body>
 <script>
    function ww() {
        var obj = document.getElementById("div2");
        par1 = obj.offsetParent;
        alert(par1.offsetLeft);
    }
    ww();
 </script>

在火狐和谷歌上面都是输出0,为什么不是50?谢谢
图片说明

  • 写回答

2条回答 默认 最新

  • xiaoouh 2015-08-22 07:33
    关注

    感觉楼主在这里有二个地方需要注意,首先par1 是div1元素,而不是div2,所以它的offsetLeft值应该是100,而不是50
    另外,之所以是零,是因为在js中,**当某个元素及其DOM结构层次中元素都未进行CSS定位时(absolute或者relative)[或者某个元素进行CSS定位时而DOM结构层次中元素都未进行CSS定位时],则这个元素的offsetParent属性的取值为根元素。更确切地说,这个元素的各种偏移量计算(offsetTop、offsetLeft等)的参照物为Body元素。(其实无论时标准兼容模式还是怪异模式,根元素都为Body元素)_**

    所以,楼主可以将代码改为

    #div1 { position: absolute; width:500px; height:500px; margin-left:100px; border:solid 1px black; } #div2 { width:300px; height:300px; margin-left:50px; border:solid 1px red; }







    <br> function ww() {<br> var obj = document.getElementById(&quot;div2&quot;);<br> par1 = obj.offsetParent;<br> alert(par1.offsetLeft);<br> }<br> ww();<br>

    这样就输出100了,也不是100,准确的说是108

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么
  • ¥15 banner广告展示设置多少时间不怎么会消耗用户价值
  • ¥16 mybatis的代理对象无法通过@Autowired装填
  • ¥15 可见光定位matlab仿真
  • ¥15 arduino 四自由度机械臂
  • ¥15 wordpress 产品图片 GIF 没法显示
  • ¥15 求三国群英传pl国战时间的修改方法
  • ¥15 matlab代码代写,需写出详细代码,代价私
  • ¥15 ROS系统搭建请教(跨境电商用途)
  • ¥15 AIC3204的示例代码有吗,想用AIC3204测量血氧,找不到相关的代码。