jQuery get position of element relative to another element

Jquery

Jquery Problem Overview


So I have a div like:

<div class="uiGrid">

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

</div>

And I want to know the position of trigger to uiGrid and have tried both these:

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

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

but neither get it. Offset is relative to the document and position is relative to the parent and not the specified element.

How would I do this? Thanks

Jquery Solutions


Solution 1 - Jquery

just do the subtraction your self...

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

Solution 2 - Jquery

what you can do here is basically, subtract parent property value from child property value.

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

Solution 3 - Jquery

You're missing the point here....

Besides that, try:

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

Solution 4 - Jquery

The problem for me was the fact that I was in a div with a scrollbar and that I had to be able to take into account the hidden part down to the root element.

If I use ".offset()" it gave me wrong values, because it does not take into consideration the hide part of scrollbar as it is relative to the document.

However, I realized that the ".offsetTop" property relative to its first parent positioned (offsetParent) was always correct. So I made a loop to go recursively to the root element by additionning the values of ".offsetTop":

I did my own jquery function for that:

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;
};

You can use the same with ".offsetLeft" I suppose...

If you want to get position of element relative to another element to answer the question:

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

> An element (offsetParent) is said to be positioned if it has a CSS > position attribute of relative, absolute, or fixed.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionCameronView Question on Stackoverflow
Solution 1 - JqueryYa ZhuangView Answer on Stackoverflow
Solution 2 - JqueryPrabath RathnayakeView Answer on Stackoverflow
Solution 3 - JqueryJorden van ForeestView Answer on Stackoverflow
Solution 4 - JqueryA. MorelView Answer on Stackoverflow