【发布时间】:2011-03-13 05:37:29
【问题描述】:
position() 和 offset() 有什么区别?我尝试在点击事件中执行以下操作:
console.info($(this).position(), $(this).offset());
而且它们似乎返回完全相同...(单击的元素在表格中的表格单元格内)
【问题讨论】:
标签: jquery positioning
position() 和 offset() 有什么区别?我尝试在点击事件中执行以下操作:
console.info($(this).position(), $(this).offset());
而且它们似乎返回完全相同...(单击的元素在表格中的表格单元格内)
【问题讨论】:
标签: jquery positioning
.offset() 方法允许我们检索元素相对于文档 的当前位置。将此与 .position() 进行对比,后者检索 相对于偏移父级的当前位置。当在现有元素之上放置一个新元素以进行全局操作(特别是实现拖放)时,.offset() 更为有用。
【讨论】:
它们是否相同取决于上下文。
position 返回一个{left: x, top: y} 对象相对于偏移父对象
offset 返回一个{left: x, top: y} 对象相对于文档。
显然,如果文档是偏移父级(通常是这种情况),则它们将是相同的。 offset parent 是“最近定位的包含元素”。
例如,用这个文件:
<div style="position: absolute; top: 200; left: 200;">
<div id="sub"></div>
</div>
那么$('#sub').offset() 将是{left: 200, top: 200},但它的.position() 将是{left: 0, top: 0}。
【讨论】:
sub 绝对定位为 0:0,那么它将位于偏移父级的左上角。跨度>
.position 在 1.12.0 中更新 => github.com/jquery/jquery/issues/1708
这两个函数都返回一个具有两个属性的普通对象:宽度和高度。
offset() 指的是相对于文档的位置。
position() 指的是相对于其父元素的位置
但是当对象的 css 位置为“绝对”时,两个函数都将返回 width=0 & height=0
【讨论】: