jQuery中的position()和offset()方法都用于获取元素的位置信息。它们可以用于诸如计算当前元素的偏移量、获取相对于其他元素的位置以及设置新的位置等方面,但二者还是有一定的区别的。
-
position()方法:获取一个元素相对其父元素的位置。它返回一个对象,该对象包含元素的上、下、左、右属性。如果元素没有父元素,则position()的结果将数据是相对于文档的。
-
offset()方法:获取一个元素相对于文档的位置。它返回一个对象,该对象包含元素的上、下、左、右属性。它与position()方法的区别在于,它不是相对于父元素的位置,而是相对于文档。
举个例子:
<body>
<div class="container">
<div id="child"></div>
</div>
</body>
.container{
position: relative;
}
#child{
position:absolute;
top: 20px;
left: 30px;
width: 50px;
height: 50px;
background: #000;
}
对于这个 HTML 代码和 CSS 样式,我们想要获取 #child 元素与 body 之间的距离。
使用position()方法:
console.log($("#child").position().top); // 20
console.log($("#child").position().left); // 30
使用offset()方法:
console.log($("#child").offset().top); // 20
console.log($("#child").offset().left); // 30
可以看到,在这种情况下,position()方法和offset()方法返回相同的结果。
再来一个例子,如果我们想要设置 #child 元素相对于 .container 元素的偏移。
使用position()方法:
$("#child").css({
"position": "absolute",
"top": $("#container").position().top + 20,
"left": $("#container").position().left + 50
});
使用offset()方法:
$("#child").css({
"position": "absolute",
"top": $("#container").offset().top + 20,
"left": $("#container").offset().left + 50
});
可以看到,在这种情况下,position()方法和offset()方法返回不同的结果。因为position()方法获取了元素相对其父元素的位置,而offset()方法获取了元素相对于文档的位置。所以,当我们设置元素的位置时,需要根据实际场景使用合适的方法来获取正确的位置信息。