offsetParent:当前容器的父级并且是已进行过CSS定位的容器元素。 如果这个容器元素未进行CSS定位, 则offsetParent属性的取值为根元素
offsetWidth:元素的可视宽度,包括元素的边框(border),水平padding,元素本身宽度
offsetLeft:元素的边框的外边缘距离与已定位的父容器(offsetparent)的左边距离(不包括元素的边框和父容器的边框)
/*不知道楼主的程序是要做什么……不过我看到offset首先想到css的偏移量。callee 属性是 arguments 对象的一个成员,该属性仅当相关函数正在执行时才可用。
callee 属性的初始值是正被执行的 Function 对象。这将允许匿名函数成为递归的。
*/
/*IE、Firefox3及更高和Opera9.5及更高为每一个元素提供了一个getBoundingClientRect()方法。这个方法返回一个矩形对象,含4个属性:left、top、right和bottom。这些属性给出了元素在页面中相对于视口的位置。但IE认为左上角坐标为(2,2),其他浏览器认为是(0,0)。
*/
//所以我用过的方法是这样的(获取元素大小):
function getBoundingClientRect(element){
var scrollTop = document.documentElement.scrollTop
var scrollLeft = document.documentElement.scrollLeft
if(element.getBoundingClientRect){
If(typeof arguments.callee.offset != "number"){
var temp = document.createElement("div")
temp.style.cssText = "position:absoluteleft:0top:0"
document.body.appendChild(temp)
arguments.callee.offset = -temp.getBoundingClientRect().top - scrollTop
document.body.removeChild(temp)
temp = null
}
var rect = element.getBoundingClientRect()
var offset = arguments.callee.offset
return{
left: rect.left + offset,
right: rect.right + offset,
top: rect.top + offset,
bottom: rect.bottom + offset
}
}else{
var actualLeft = getElementLeft(element)
var actualTop = getElementTop(element)
return{
left: actualLeft - scrollLeft,
right: actualLeft + element.offsetWidth - scrollLeft,
top: actualTop - scrollTop,
bottom: actualTop + element.offsetHeight - scrollTop
}
}
}
纯js
function getOffsetLeft(o){
var left=0
var offsetParent = o
while (offsetParent != null && offsetParent != document.body){
left += offsetParent.offsetLeft
offsetParent = offsetParent.offsetParent
}
return left
}
jQuery中很好的函数可以实习那
$("#Button").offset().left注意:offset() 函数的计算 不包括margin值(但包含border值)