Как получить offset () относительно родителя в jQuery?

Это дает мне положение некоторого элемента от левого края главного окна:

$('#bar').offset().left;

Если этот элемент расположен внутри какого-то другого элемента, и я хотел получить положение #bar относительно #foo (его родителя), как я могу это получить?

<style>
#foo { width: 200px; margin: 0 auto; }
#foo #bar { width: 50px; margin: 0 auto; }
</style>

<div id="foo">
   <span id="bar"></span>
</div>

Я видел, что есть функция под названиемoffsetParent() но когда консоль вошла в систему, кажется, что эта функция не имеет каких-либо свойств, называемыхleft или жеx, Так что не уверен, что это можно использовать, чтобы получить то, что мне нужно.

Таким образом, в моем примере выше смещение должно составлять примерно 125 пикселей от края родительского элемента, а не несколько тысяч пикселей от края основного окна.

 Pointy08 июн. 2012 г., 21:27
Получить левое смещение родителя и сделать вычитание?

Ответы на вопрос(4)

Решение Вопроса

Используйте метод position ().

$('#bar').position().left;

Position within a div relative to its parent:

In my case, when scroll changed the calculated offset also changed and it shouldn't so i ended up using pure javascript which is quicker anyway...

element.get(0).offsetTop

Other variation like Left is also possible element.get(0).offsetleft

Conclusion

element.offset (). top или position () не являются оптимальными для позиционных относительных случаев.

offsetLeft = $('#bar').position().left;
offsetTop = $('#bar').position().top;
 21 янв. 2015 г., 19:55
Странно то, что если удалить position: относительный в контейнере (строка 6 css), position () ведет себя так же, как offset (). Смотрите это [ссылка]jsfiddle.net/ciroxxx/ut7ord0a/1

получить смещение элемента и вычесть смещение его родителя.

var elem = $("#bar");
var offset = elem.offset().left - elem.parent().offset().left;

Ваш ответ на вопрос