我个人的思路是  查找该div 前面是否具备其他htmlElement  如果有 则获取他们的 offsetWidth 然后 用其父元素的left+ 这些width的和 获取当其left
但这实在效率低下. 有没有即有的方法. 获取到真正的 绝对位置呢?

解决方案 »

  1.   

    看看这样行不
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>无标题文档</title>
    </head>
    <body>
    <div style="float:left;width:400px;height:400px;border:#000 solid 1px;" id="div1">
    div1
    <div style="margin:50px;border:#000 solid 1px;width:100px;height:100px;" id="div2">
    div2
    </div>
    <div style="margin:50px;border:#000 solid 1px;float:right;width:100px;height:100px;" id="div3">
    div3
    </div>
    </div>
    <br />
    <span id="info"></span><script type="text/javascript">
    function getDomOffset(el)
    {   
    for(var lx=0,ly=0;el!=null; el=el.offsetParent)
    {
    lx+=el.offsetLeft;
    ly+=el.offsetTop;
    }   
    return   {x:lx,y:ly}   
    }var info = document.getElementById("info");
    document.onmousemove=function()
    {
    var evt = window.event || arguments[0];
    var el = evt.target || evt.srcElement;
    if(el.tagName.toLowerCase()=="div")
    {
    var pos = getDomOffset(el);
    info.innerHTML = el.id + "的left是" + pos.x + ",top是" + pos.y;
    }
    }
    </script>
    </body>
    </html>
      

  2.   

    我看着 4 楼和楼主的结果一样吧.都是加上了它父亲节点的left  和 top 
      

  3.   

    4 楼的方法 和我 1楼说的方法是一样的 都是 通过 获取父元素 的left  然后相加 .这样对待 float:left 的东西 是不行的..
    我看了下 如果把float:left前面的元素都强制声明为 block 级元素 似乎结果好了一些.
      

  4.   


    没看仔细,方法是一样了不过我写的那个,第一个div就是float:left的,没问题啊
      

  5.   


    您好, 我在写一个完全dom式的控件.  要控制的div前面有几个 img 为了 让img 和这个div在一行. 我强制他们都 float:left 这时 取不到 div的正常的 left值 
      

  6.   

    谢谢 大家.  我找到结症根源了...
    原来在 safari 和google浏览器中  如果存在图片元素 而你没给图片元素指定 宽高 用offset是获取不到 它的 width height的 导致  图片后面的元素  使用offsetLeft 也就无法获取到 正确的位置..... 所以 只要给图片元素都指定一个 宽和高  就全都正常了.... 其实和float:left 并没有关系....