在 jQuery 中,如何设置元素的“top,left”属性,其位置值相对于父级而不是文档?

Posted

技术标签:

【中文标题】在 jQuery 中,如何设置元素的“top,left”属性,其位置值相对于父级而不是文档?【英文标题】:In jQuery how can I set "top,left" properties of an element with position values relative to the parent and not the document? 【发布时间】:2012-09-26 12:45:41 【问题描述】:

.offset([coordinates]) 方法设置元素的坐标但仅相对于文档。那么如何设置元素的坐标但相对于父元素?

我发现.position() 方法仅获取相对于父级的“top,left”值,但它没有设置任何值。

我试过了

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

但不起作用。

【问题讨论】:

【参考方案1】:

你可以试试 jQuery UI 的 .position 方法。

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

Check the working demo.

【讨论】:

请注意,该方法不是来自 jQuery 的 position(),而是来自 jQuery UI 的 position(),它是一个 SETTER。 api.jqueryui.com/position @AdrianoG.V.Esposito,如何定义右下偏移【参考方案2】:
$("#mydiv").css('top', 200);

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

【讨论】:

【参考方案3】:

要设置相对于父元素的位置,您需要设置父元素的position:relative 和元素的position:absolute

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

这是因为position: absolute; 相对于最近的定位父级(即,具有除默认static 之外的任何位置属性的最近的父级)定位。

【讨论】:

$("#mydiv").css(top: '200px', left: '200px', position:'absolute'); $("#mydiv").css(top: '200', left: '200', position:'absolute'); 值是字符串,则必须包含单位,否则将不起作用。 关于有一个相对定位的父母的注释让我省了很多挫折。谢谢。【参考方案4】:

我发现如果传递的值是字符串类型,后面必须跟'px'(即90px),如果值是整数,它会自动追加px。 width 和 height 属性更宽容(任何一种都可以)。

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】:

动态页面的代码偏移动态

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

【讨论】:

【参考方案6】:

记忆中的定位,我来的这么晚,不知道有没有人会看到,但是--

我不喜欢使用css() 设置位置,虽然通常它很好。我认为最好的办法是使用 jQuery UI 的 position() setter,如 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,不确定它是否会返回documentnull 或完全其他的东西。

offsetParent 从 jQuery 1.2.6 开始可用,2008 年的某个时候,所以这种技术现在和最初的问题被问到时都有效。

【讨论】:

【参考方案7】:

使用jQueryoffset() 函数。应该是这样的:

$container.offset(
        'left': 100,
        'top': mouse.y - ( event_state.mouse_y - event_state.container_top ) 
    );

【讨论】:

以上是关于在 jQuery 中,如何设置元素的“top,left”属性,其位置值相对于父级而不是文档?的主要内容,如果未能解决你的问题,请参考以下文章

如何在尚未在 DOM 中的元素上使用 jQuery 设置数据属性?

如何使用 jQuery 取消设置元素的 CSS 属性?

如何使用 javascript 或 jquery 为每个数组元素设置背景颜色和边框?

如何设置扩展的“选择”元素的最大高度(jQuery 插件)

求教:jquery如何操作隐藏的DOM元素

如何在 jquery 中将 div 元素的可见属性设置为 true 或 false?