jQuery получить положение элемента относительно другого элемента
Так что у меня есть div, как:
<div class="uiGrid">
<div class="trigger"></div>
</div>
и я хочу знать положение триггера для uiGrid и попробовал оба эти:
$('.trigger').offset('.uiGrid');
$('.trigger').position('.uiGrid');
но не понимаю. Смещение относится к документу, а позиция - к родительскому элементу, а не к указанному элементу.
Как бы я это сделал?
Спасибо
4 ответов:
просто сделать вычитание себя...
var relativeY = $("elementA").offset().top - $("elementB").offset().top;
что вы можете сделать здесь в основном, вычесть значение родительского свойства из значения дочернего свойства.
var x = $('child-div').offset().top - $('parent-div').offset().top;
вы упускаете суть здесь....
кроме того, попробуйте:
myPosY = $('.trigger').offset().left - $('.uiGrid').offset().left; myPosX = $('.trigger').offset().top - $('.uiGrid').offset().top;
проблема для меня заключалась в том, что я был в div с полосой прокрутки и что я должен был учитывать скрытую часть вплоть до корневого элемента.
Если я использую ".offset () " он дал мне неправильные значения, потому что он не учитывает скрытую часть полосы прокрутки, поскольку она относится к документу.
однако, я понял, что ".offsetTop" собственность по отношению к своей первой позиционируется родителя (offsetParent) всегда был корректен. Поэтому я сделал петлю чтобы рекурсивно перейти к корневому элементу путем добавления значений ".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 атрибут положения относительного, абсолютного или зафиксированный.
Comments