В jQuery как я могу установить" верхние,левые " свойства элемента со значениями позиции относительно родителя, а не документа?



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



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



Я пробовал с



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


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

589   6  

6 ответов:

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

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

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

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

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

вы можете попробовать jQuery UI в .позиция метод.

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

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

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

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

Я обнаружил, что если переданное значение является строковым типом, за ним должен следовать '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

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

мне не нравится положение с помощью css(), хотя часто это нормально. Я думаю, что лучшим вариантом является использование пользовательского интерфейса jQuery по position() сеттер, как отметил xdazz. Однако если jQuery UI по какой-то причине не является опцией (но 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родитель сам по себе был абсолютным внутри чего-то другого?). Я думаю, что единственный крупный крайний случай-если $div нет offsetParent, не уверен, что он вернется document,null, или что-то совсем другое.

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

Comments

    Ничего не найдено.