W jQuery jak Mogę ustawić "górne, lewe" właściwości elementu z wartościami pozycji względem elementu nadrzędnego, a nie dokumentu?

.offset([coordinates]) metoda ustawia współrzędne elementu, ale tylko względem dokumentu. W jaki sposób mogę ustawić współrzędne elementu, ale względem rodzica?

Znalazłem, że .position() metoda pobiera tylko wartości" góra,lewo " względem rodzica, ale nie ustawia żadnych wartości.

Próbowałem z

$("#mydiv").css({top: 200, left: 200});
Ale nie działa.
Author: Akhil Thayyil, 2012-10-05

6 answers

Aby ustawić pozycję względem rodzica, musisz ustawić position:relative rodzica i position:absolute elementu

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

To działa, ponieważ position: absolute; pozycjonuje względem najbliższegopozycjonowanego rodzica (tj. najbliższego rodzica z dowolną właściwością position inną niż domyślna static).

 193
Author: Champ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-10-05 12:32:38
$("#mydiv").css('top', 200);

$("#mydiv").css('left', 200);
 34
Author: MMALSELEK,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-10-05 11:09:48

Możesz spróbować jQuery UI .metoda position .

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

Sprawdź działające demo.

 11
Author: xdazz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-01-20 22:55:57

Przesunięcie kodu dynamicznego dla dynamicznej strony

var pos=$('#send').offset().top;
$('#loading').offset({ top : pos-220});
 4
Author: behzad,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-11-23 07:09:13

Odkryłem, że jeśli przekazana wartość jest typu string, po niej musi być " px " (tzn. 90px), gdzie jeśli wartość jest liczbą całkowitą, to automatycznie doda px. właściwości szerokości i wysokości są bardziej wyrozumiałe(oba typy działają).

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
 3
Author: Derek Wade,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-09-24 22:11:36

[[10]] odświeżam pamięć o ustawieniu pozycji, przychodzę do tego tak późno, że nie wiem, czy ktoś jeszcze to zobaczy, ale ... [11]}

Nie lubię ustawiać pozycji za pomocą css(), choć często jest to w porządku. Myślę, że najlepiej będzie użyć setera jQuery UI position() Jak zauważył xdazz. Jednak jeśli jQuery UI nie jest z jakiegoś powodu opcją (ale jQuery jest), wolę to:

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

Ma tę zaletę, że nie ustawia arbitralnie rodzica $div na względne pozycjonowanie (co jeśli $div rodzic był, sam, absolutny umieszczony w czymś innym?). Myślę, że jedynym poważnym przypadkiem krawędzi jest jeśli {[3] }nie ma offsetParent, Nie wiem, czy zwróci document, null, albo coś zupełnie innego.

offsetParent jest dostępna od jQuery 1.2.6, gdzieś w 2008 roku, więc ta technika działa teraz i kiedy zadano oryginalne pytanie.

 0
Author: knickum,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-02-22 17:16:49