从父母以外的元素获得偏移?

时间:2012-12-11 17:52:47

标签: javascript jquery position

使用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之间的距离。这可能吗?

编辑添加

尝试了这两个,并且都返回相同的东西:top:381,left:0。但是对于文档,left不是0;它不可能。

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

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

当这是div的位置时,两者的左边是0怎么可能?不留0表示它一直在浏览器窗口的左侧吗?

enter image description here

1 个答案:

答案 0 :(得分: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
}