• offsetParent详解


    网上对offsetParent和parentNode差异的解释都是同一篇文章千篇一律,讲的不是很清楚。

    offsetParent用的最普遍的就是来计算元素在页面中的位置,我们通过 getBoundingClientRect()方法来获取页面中元素的位置,不过这只支持最新的浏览器,如果要兼容像Opera9.2和Firefox2以及Safair任何版本,都只能通过offsetParent该属性来循环获计算获得元素的位置,只是效率没getBoundingClientRect()好。贴一段缩减了来自YUI里的代码: 

    function getElementXY(el){ //el 要获取位置的元素对象
        var pos = [el.offsetLeft, el.offsetTop]; //首先获得该元素相对第一个非流布局父元素的位置
        var parentNode = el.offsetParent; //获得该元素的第一个非流布局父元素
        if (parentNode != el) { 
            
    while (parentNode) { 
                pos[
    0+= parentNode.offsetLeft; 
                pos[
    1+= parentNode.offsetTop;
                parentNode 
    = parentNode.offsetParent; //循环定义非流布局父元素
            }
        }
    }

    MSDN解释offsetParent在大多时候返回的是Body,其实是返回第一个非流布局的父级元素, 也就是postion的值是 absolute,relative,fixed,(inherit 继承父元素也是前三者)其中之一,当然如果父级元素都是流布局最后返回的肯定是Body,由此可见offsetParent本身在获取的时候要通过页面不 断查找父元素,尤其在代码多层嵌套的时候,需要向上查找未知的层次,直到获取到第一个非流布局元素。

    offsetLeft和offsetTop分别返回相对offsetParent的位置,也就是返回相对第一个非流布局父级元素的位置。

    上面的代码可以看出这个方法是通过不断循环获得相对非流布局父元素的位置相加来最后计算得到要获取的位置。

    IE7对offsetParent解释有个BUG,貌似始终返回父元素。

    parentNode就不用解释了,父节点。

  • 相关阅读:
    20120621第一天_复习与测试\05方法
    20120621第一天_复习与测试
    转义字符符号及对应的含义
    如何判断一个窗体是否打开
    out 和ref 的小结
    20120621第一天_复习与测试\03循环控制
    详解C#break ,continue, return
    往xptable控件中添加数据
    校内网的设计。
    iPhone不再孤独,Palm Pre为伴——互联网的未来在手中。
  • 原文地址:https://www.cnblogs.com/purplefox2008/p/1821443.html
Copyright © 2020-2023  润新知