2012-12-11 32 views
1

使用element.offset().left可以从您的父级获取元素的偏移位置。有没有办法从另一个元素获得偏移位置?例如,以下是我的html:从父项以外的元素获取偏移量?

<div id="tile_id_579" class="product_tile"> 
<div class="selectContainer"> 
    <table style="width:100%;"> 
     <tbody> 
      <tr> 
       <td>   
       <div id="select-undefined" class="tzSelect"> 
        <div id="options-undefined" class="tzOptions" style="max-height: 500px; width: 250px; display: none; min-width: 118px;"> 
         <ul class="dropDown" id="dropdown-undefined"> 
          <li><div class="header">Hand-Tossed Style Pizza</div> 
           <div class="subheader">The crowd-pleasing pizza that everyone can agree on.</div> 
           <div class="optkey">0</div> 
          </li> 
          <li><div class="header">Pan Pizza</div> 
           <div class="subheader">Our Pan Pizza is America's favorite!</div> 
           <div class="optkey">1</div> 
          </li> 
         </ul> 
        </div> 
       </div> 
       </td> 
      </tr> 
     </tbody> 
    </table> 
</div> 
</div> 

它是从数据库生成的。使用offset().left可以得到我从#selecct-undefined div的偏移量,但我需要知道#options-undefined div与.selectContainer div的差距。这可能吗?相对于文档0。但离开不为0;:

编辑添加的

尝试这两种,而且都返回同样的事情:顶:381,左它不可能。

var tip = $('#tile_id_579 #options-undefined .header'); 
tip.first().position(); 

var tip = $('#tile_id_579 #options-undefined .header'); 
tip.first().offset(); 

这怎么可能,左边是0时都这哪里是DIV是什么?还剩0没有暗示它一直在浏览器窗口的左边?

enter image description here

+1

['.offset()'](http://api.jquery.com/offset/)是相对于文档,['.POSITION()'](HTTP://api.jquery .com/position /)是相对于抵消父项。 – j08691

+0

我已经试过了,他们都返回相同的值。我不确定当父母不是文档本身时这是如何实现的......给OP添加例子。 – EmmyS

回答

0

因为你的元素的确是你指定你可以使用.POSITION(),而不是.offset该父()内。但是,如果.selectContainer不是最接近的相对父项,则需要获取元素和该“其他”元素的位置并计算其差异。

var myPos = $('#options-undefined').offset(); 
var otherPos = $('#options-undefined').closest('.selectContainer').offset();//if #options-undefined wasn't a child of .selectContainer you would do $('.selectContainer').offset(); 

var _offset = { 
    top: otherPos.top - myPos.top, 
    left: otherPos.left - myPos.left 
}