jQuery:position()和offset()之间的区别

Svi*_*ish 174 jquery positioning

position()和之间有什么区别offset()?我尝试在点击事件中执行以下操作:

console.info($(this).position(), $(this).offset());
Run Code Online (Sandbox Code Playgroud)

它们似乎返回完全相同的...(点击的元素在表格的表格单元格内)

Dav*_*und 209

这取决于元素所处的上下文.position返回相对于偏移父项的位置,并相对于文档{left: x, top: y}执行相同的操作.显然,如果文档是偏移父代(通常是这种情况),则它们将是相同的.

但是,如果你有这样的布局:

 <div style="position: absolute; top: 200; left: 200;">
     <div id="sub"></div>
 </div>
Run Code Online (Sandbox Code Playgroud)

然后offsetfor 将是200:200,但{left: x, top: y}它将是0:0.

  • 那么偏移父项是位置设置为绝对的第一个父项?要么? (2认同)

jAn*_*ndy 28

所述.offset()方法允许我们以检索一个元素的当前位置相对于文档.将此与.position()进行对比,该位置检索相对于偏移父项当前位置.将新元素定位在现有元素之上以进行全局操作(特别是实现拖放)时,.offset()更有用.

资料来源:http://api.jquery.com/offset/

  • 如上所述,什么被认为是抵消的父母?似乎在另一个div内的第一个div上调用position()并不总是返回0,0 - 即使没有其他样式或定位正在进行. (3认同)
  • jquery.offsetParent():http://api.jquery.com/offsetparent/"获取最接近的祖先元素." (2认同)