JQuery: Разница между позицией() и смещением()
В чем разница между position()
и offset()
? Я попытался сделать следующее в событии click:
console.info($(this).position(), $(this).offset());
И они, похоже, возвращаются точно так же... (Элемент clicked находится внутри ячейки таблицы в таблице)
Ответы
Ответ 1
Являются ли они одинаковыми, зависит от контекста.
position
возвращает объект {left: x, top: y}
относительно родительского смещения
offset
возвращает объект {left: x, top: y}
относительно документа.
Очевидно, что если документ является родительским смещением, что часто имеет место, они будут идентичны. Смещенный родительский элемент - это "ближайший позиционированный содержащий элемент".
Например, с этим документом:
<div style="position: absolute; top: 200; left: 200;">
<div id="sub"></div>
</div>
Тогда $('#sub').offset()
будет {left: 200, top: 200}
, но его .position()
будет {left: 0, top: 0}
.
Ответ 2
Метод .offset() позволяет нам получить текущую позицию элемента относительно документа. Контрастируйте это с помощью .position(), которая извлекает текущую позицию относительно родителя смещения. При позиционировании нового элемента поверх существующего для глобальных манипуляций (в частности, для реализации drag-and-drop) более полезно использовать .offset().
Источник: http://api.jquery.com/offset/
Ответ 3
Обе функции возвращают простой объект с двумя свойствами: шириной и высотой.
offset() относится к позиции относительно документа.
position() относится к позиции относительно ее родительского элемента
НО, когда позиция объекта css является "абсолютной", обе функции возвращают width = 0 и height = 0