jQuery获取元素相对于另一个元素的位置

时间:2011-12-01 14:09:09

标签: jquery

所以我有一个div:

<div class="uiGrid">

<div class="trigger"></div>

</div>

我想知道触发器对uiGrid的位置并试过这两个:

$('.trigger').offset('.uiGrid');

$('.trigger').position('.uiGrid');

但是都没有。偏移量相对于文档而言,位置相对于父级而不是指定的元素。

我该怎么做? 感谢

4 个答案:

答案 0 :(得分:84)

只需减去你的自我...

var relativeY = $("elementA").offset().top - $("elementB").offset().top;

答案 1 :(得分:12)

这里你可以做的基本上是从子属性值中减去父属性值。

var x = $('child-div').offset().top - $('parent-div').offset().top;

答案 2 :(得分:4)

你在这里错过了这一点......

除此之外,试试:

myPosY = $('.trigger').offset().left - $('.uiGrid').offset().left;
myPosX = $('.trigger').offset().top - $('.uiGrid').offset().top;

答案 3 :(得分:0)

对我来说问题是我在一个带滚动条的div中,我必须能够将隐藏的部分考虑到根元素。

如果我使用“.offset()”它给了我错误的值,因为它没有考虑滚动条的隐藏部分,因为它是相对于文档的。

但是,我意识到相对于其第一个父位置(offsetParent)的“.offsetTop”属性始终是正确的。所以我通过添加“.offsetTop”的值来循环递归到根元素:

我为此做了我自己的jquery函数:

jQuery.fn.getOffsetTopFromRootParent = function () {
    let elem = this[0];
    let offset = 0;
    while (elem.offsetParent != null) {
        offset += elem.offsetTop;
        elem = $(elem.offsetParent)[0];
        if (elem.offsetParent === null) {
            offset += elem.offsetTop;
        }
    }
    return offset;
};

你可以使用“.offsetLeft”,我想......

如果你想获得元素相对于另一个元素的位置来回答这个问题:

let fromElem = $("#fromElemID")[0];
let offset = 0;
while (fromElem.id.toUpperCase() != "toElemID".toUpperCase()) {
    offset += fromElem.offsetTop;
    fromElem = $(fromElem.offsetParent)[0];
}
return offset;
  

如果元素(offsetParent)具有CSS,则称其被定位   相对,绝对或固定的位置属性。