跨浏览器的javascript函数,用于查找页面中元素的实际位置

时间:2011-11-13 11:02:39

标签: javascript html internet-explorer

抱歉 - 我的坏 - 另一个脚本中出现错误,让我觉得这个功能有问题。 ** *但是,嘿,如果你需要的话,你有一个很好的功能;)

感谢您的帮助。

!~~

我有这个功能:

  function findPos(obj) {
      var curleft = curtop = 0;
      if (obj && obj.offsetParent) {
        do {
            curleft += obj.offsetLeft;
            curtop += obj.offsetTop;
        } while (obj = obj.offsetParent);
      }
      return [curleft,curtop];
  }

在页面中查找和元素的实际位置。

但由于某种原因,它在IE中引发了我的错误;如何修复此问题以跨浏览器工作?

2 个答案:

答案 0 :(得分:7)

这段独立的代码应该可以在现代浏览器中获得偏移,而不需要框架。它使用getBoundingClientRect方法:

function offset(element){
    var body = document.body,
        win = document.defaultView,
        docElem = document.documentElement,
        box = document.createElement('div');
    box.style.paddingLeft = box.style.width = "1px";
    body.appendChild(box);
    var isBoxModel = box.offsetWidth == 2;
    body.removeChild(box);
    box = element.getBoundingClientRect();
    var clientTop  = docElem.clientTop  || body.clientTop  || 0,
        clientLeft = docElem.clientLeft || body.clientLeft || 0,
        scrollTop  = win.pageYOffset || isBoxModel && docElem.scrollTop  || body.scrollTop,
        scrollLeft = win.pageXOffset || isBoxModel && docElem.scrollLeft || body.scrollLeft;
    return {
        top : box.top  + scrollTop  - clientTop,
        left: box.left + scrollLeft - clientLeft};
}

答案 1 :(得分:2)

您可以使用Jquery的offset