it-swarm.com.ru

В jQuery, как я могу установить свойства «top, left» элемента со значениями позиции относительно родителя, а не документа?

Метод .offset([coordinates]) устанавливает координаты элемента, но только относительно документа. Тогда как я могу установить координаты элемента, но относительно родителя?

Я обнаружил, что метод .position() получает только "верхние, левые" значения относительно родителя, но он не устанавливает никаких значений.

Я пробовал с

$("#mydiv").css({top: 200, left: 200});

но не работает.

131
Max

Чтобы установить положение относительно родителя, вам нужно установить position:relative родителя и position:absolute элемента

$("#mydiv").parent().css({position: 'relative'});
$("#mydiv").css({top: 200, left: 200, position:'absolute'});

Это работает, потому что position: absolute; позиционируется относительно ближайшего позиционированного родителя (т.е. ближайшего родителя с любым свойством позиции, отличным от значения по умолчанию static).

211
Champ
$("#mydiv").css('top', 200);

$("#mydiv").css('left', 200);
34
MMALSELEK

Вы можете попробовать метод . Position в jQuery UI.

$("#mydiv").position({
  of: $('#mydiv').parent(),
  my: 'left+200 top+200',
  at: 'left top'
});

Проверьте рабочую демонстрацию.

13
xdazz

Динамическое смещение кода для динамической страницы

var pos=$('#send').offset().top;
$('#loading').offset({ top : pos-220});
5
behzad

Я обнаружил, что если переданное значение является строковым типом, за ним должно следовать "px" (т.е. 90px), где, если значение является целым числом, оно автоматически добавит px. свойства ширины и высоты более снисходительны (любой тип работает).

var x = "90";
var y = "120"
$(selector).css( { left: x, top: y } )        //doesn't work
$(selector).css( { left: x + "px", top: y + "px" } )        //does work

x = 90;
y = 120;
$(selector).css( { left: x, top: y } )        //does work
5
Derek Wade

Освежая память о настройке позиции, я прихожу к этому так поздно, я не знаю, увидит ли это кто-нибудь еще, но -

Мне не нравится устанавливать позицию с помощью css(), хотя часто это нормально. Я думаю, что лучше всего использовать установщик position() пользовательского интерфейса jQuery, как отметил xdazz. Однако, если пользовательский интерфейс jQuery по какой-то причине не является опцией (но jQuery есть), я предпочитаю это:

const leftOffset = 200;
const topOffset = 200;
let $div = $("#mydiv");
let baseOffset = $div.offsetParent().offset();
$div.offset({
  left: baseOffset.left + leftOffset,
  top: baseOffset.top + topOffset
});

Это имеет то преимущество, что не произвольно устанавливает родителя $div в относительное позиционирование (что если родитель $div сам по себе был абсолютно позиционирован внутри чего-то еще?). Я думаю, что единственный основной случай Edge - это если $div не имеет offsetParent, не уверен, что он вернет document, null или что-то еще полностью.

offsetParent была доступна с jQuery 1.2.6, где-то в 2008 году, поэтому этот метод работает сейчас и когда был задан оригинальный вопрос.

0
knickum