jQuery get position of element relative to another element

后端 未结 4 1812
旧时难觅i
旧时难觅i 2020-12-08 18:28

So I have a div like:

And I want to know the position

4条回答
  •  南方客
    南方客 (楼主)
    2020-12-08 18:48

    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.

提交回复
热议问题