JavaScript的DOM_获取元素周边大小

一、clientLeft 和 clientTop

  这组属性可以获取元素设置了左边框和上边框的大小,目前只提供了 Left 和 Top 这组,并没有提供 Right 和 Bottom。

<script type="text/javascript">
    window.onload = function(){
        var box = document.getElementById("box");
        alert(box.clientLeft);
        alert(box.clientTop);
    }
</script>
<style type="text/css">
    .aaa{
        background:#ccc;
        width:200px;
        height:200px;
        border:10px solid red;
    }
</style>
</head>
<body>
    <div id="box" class="aaa">测试Div</div>
</body>

二、offsetLeft 和 offsetTop

  1、这组属性可以获取当前元素相对于父元素的位置。 

      获取元素当前相对于父元素的位置,最好将它设置为定位 position:absolute;不要用外边距,否则不同的浏览器会有不同的解释。

        加上边框和内边距不会影响它的位置,但加上外边据会累加。

<script type="text/javascript">
    window.onload = function(){
           var box = document.getElementById("box");
           alert(box.offsetLeft); //50
           alert(box.offsetTop);//50
    }
</script>
<style type="text/css">
    /*
     body{
         margin:50px;
    }
    */
    .aaa{
        background:#ccc;
        width:200px;
        height:200px;
        position:absolute;
        top:50px;
        left:50px;
    }
</style>
</head>
<body>
    <div id="box" class="aaa">测试Div</div>
</body>

  2、得到父元素

    offsetParent 中,如果本身父元素是<body>,非 IE6,7,8 返回 body 对象,IE 6,7,8返回 html 对象。

    如果两个元素嵌套,如果上父元素没有使用定位 position:absolute,那么 offsetParent 将返回 body 对象或 html 对象。

    所以,在获取 offsetLeft 和 offsetTop 时候,CSS 定位很重要。

<script type="text/javascript">
    window.onload = function(){
        var box = document.getElementById("box");
           alert(box.offsetParent);  //得到父元素,IE6,7,8得到的是HTML跟标签,其他得到的是body标签
    }

</script>
<style type="text/css">
</style>
</head>
<body>
    <div id="box" class="aaa">测试Div</div>
</body>
<script type="text/javascript">
    window.onload = function(){
        var box = document.getElementById("box");
           alert(box.offsetParent);//父元素是id为pox的那个div,如果没加定位就变成body了
           alert(box.offsetTop);//20
           alert(box.offsetParent.offsetTop);//50
    }
</script>
<style type="text/css">
    #box{
        background:#ccc;
        width:200px;
        height:200px;
        margin:20px;

    }
    #pox{
        position:absolute;
        top:50px;
        left:50px;
        background:blue;
        width:400px;
        height:400px;
    }
</style>
</head>
<body>
    <div id="pox">
        <div id="box" class="aaa">测试Div</div>
    </div>
</body>

  如果多层的话,就必须使用循环或递归。

<script type="text/javascript">
    window.onload = function(){
        var box = document.getElementById("box");
           alert(box.offsetParent);//父元素是id为pox的那个div,如果没加定位就变成body了
           alert(offsetLeft(box)+offsetLeft(box.offsetParent));//20
           alert(box.offsetParent.offsetTop);//50
    }
    function offsetLeft(element) {
        var left = element.offsetLeft;                 //得到第一层距离
        var parent = element.offsetParent;             //得到第一个父元素
        while (parent !== null) {                     //如果还有上一层父元素left += parent.offsetLeft; //把本层的距离累加
            parent = parent.offsetParent;             //得到本层的父元素
        }                                             //然后继续循环
        return left;
    }
</script>
<style type="text/css">
    #box{
        background:#ccc;
        width:200px;
        height:200px;
        margin:20px;

    }
    #pox{
        position:absolute;
        top:50px;
        left:50px;
        background:blue;
        width:400px;
        height:400px;
    }
</style>
</head>
<body>
    <div id="pox">
        <div id="box" class="aaa">测试Div</div>
    </div>
</body>

三、scrollTop 和 scrollLeft

  这组属性可以获取滚动条被隐藏的区域大小,也可设置定位到该区域。意思就是获取滚动条的位置(有滚动条的前提下)

box.scrollTop; //获取滚动内容上方的位置
box.scrollLeft; //获取滚动内容左方的位置

  如果要让滚动条滚动到最初始的位置,那么可以写一个函数:

function scrollStart(element) {
  if (element.scrollTop != 0)
    element.scrollTop = 0;
}

四、getBoundingClientRect()

  这个方法返回一个矩形对象,包含四个属性:left、top、right和 bottom。分别表示元素各边与页面上边和左边的距离。

<script type="text/javascript">
    window.onload = function(){
        var box = document.getElementById("box");
            alert(box.getBoundingClientRect().top); //元素上边距离页面上边的距离
            alert(box.getBoundingClientRect().right); //元素右边距离页面左边的距离
            alert(box.getBoundingClientRect().bottom); //元素下边距离页面上边的距离
            alert(box.getBoundingClientRect().left); //元素左边距离页面左边的距离
    }
</script>
<style type="text/css">
    #box{
        background:#ccc;
        width:200px;
        height:200px;
        position:absolute;
        top:50px;
        left:50px;
    }
</style>
</head>
<body>
    <div id="box" class="aaa">测试Div</div>
</body>

  IE、Firefox3+、Opera9.5、Chrome、Safari 支持,在 IE 6,7,8中,默认坐标从(2,2)开始计算,导致最终距离比其他浏览器多出两个像素,需要做个兼容。

<script type="text/javascript">
    window.onload = function(){
        var box = document.getElementById("box");
        alert(document.documentElement.clientTop); //IE6,7,8 为 2其他为0
        alert(document.documentElement.clientLeft); //IE6,7,8 为2其他为0

        alert(getRect(box).top); //元素上边距离页面上边的距离
        alert(getRect(box).right); //元素右边距离页面左边的距离
        alert(getRect(box).bottom); //元素下边距离页面上边的距离
        alert(getRect(box).left); //元素左边距离页面左边的距离
    }
    function getRect(element) {
        var rect = element.getBoundingClientRect();
        var top = document.documentElement.clientTop;
        var left = document.documentElement.clientLeft;
        return {
            top : rect.top - top,
            bottom : rect.bottom - top,
            left : rect.left - left,
            right : rect.right - left
        }
    }
</script>
<style type="text/css">
    #box{
        background:#ccc;
        width:200px;
        height:200px;
        position:absolute;
        top:50px;
        left:50px;
    }
</style>
</head>
<body>
    <div id="box" class="aaa">测试Div</div>
</body>
时间: 2024-10-10 17:09:03

JavaScript的DOM_获取元素周边大小的相关文章

JavaScript的DOM_获取元素方法_getElementsByTagName()获取相同元素的节点列表

不管是 getElementById 还是 getElementsByTagName,在传递参数的时候,并不是所有浏览器都必须区分大小写,为了防止不必要的错误和麻烦,我们必须坚持养成区分大小写的习惯. 一.通过标签名获取节点 1.getElementsByTagName()方法通过标签名获取节点,因为标签名会重复,所以返回一个对象数组 HTMLCollection(NodeList),这个数组保存着所有相同元素名的节点列表. <script type="text/javascript&qu

JavaScript的DOM_获取元素方法_getElementById()获取特定ID元素的节点

一.通过标签的id属性值获取该标签节点 接受一个参数:如果找到相应的元素则返回该元素的 HTMLDivElement 对象,如果不存在,则返回 null. <script type="text/javascript"> window.onload = function(){ var box = document.getElementById('box'); //获取 id 为 box 的元素节点 alert(box.id); } </script> </h

JavaScript的DOM_获取元素方法

W3C 提供了比较方便简单的定位节点的方法和属性,以便我们快速的对节点进行操作. 分别为:getElementById().getElementsByTagName().getElementsByName().getAttribute().setAttribute()和 removeAttribute(). 1.getElementById()方法: 接受一个参数:通过标签的id属性值获取该标签节点.如果找到相应的元素则返回该元素的 HTMLDivElement 对象,如果不存在,则返回 nul

JavaScript的DOM_获取元素方法_getElementsByName()获取相同名称(name)的节点列表

一.通过标签的name属性获取节点 1.getElementsByName()方法通过标签的name属性获取节点,因为name有相同,所以返回一个对象数组HTMLCollection(NodeList). <script type="text/javascript"> window.onload = function () { if(document.getElementsByName){ var box = document.getElementsByName('text

JavaScript的DOM_获取CSS样式设置元素大小

一.通过 style 内联获取元素的大小 style 获取只能获取到行内 style 属性的 CSS 样式中的宽和高,如果有获取:如果没有则返回空. <script type="text/javascript"> window.onload = function(){ var box = document.getElementById('box'); //获取元素 alert(box.style.width); //200px. 没有设置的话为空 alert(box.sty

JavaScript通过ID获取元素坐标

JavaScript通过ID获取元素坐标 function getElementPos(elementId) { var ua = navigator.userAgent.toLowerCase(); var isOpera = (ua.indexOf('opera') != -1); var isIE = (ua.indexOf('msie') != -1 && !isOpera); // not opera spoof var el = document.getElementByIdx

JavaScript的DOM_获取/设置/移除特定元素节点的属性_getAttribute()/setAttribute()/removeAttribute()

一.获取特定元素节点的属性的值_getAttribute() 1.getAttribute()方法将获取元素中某个属性的值.它和直接使用.属性获取属性值的方法有一定区别. <script type="text/javascript"> window.onload = function(){ var box = document.getElementById('box'); alert(box.bbb); // 获取元素的自定义属性值,非 IE 不支持 自定义的属性不可以,结

【全面总结】js获取元素位置大小

目录 1.关于offset offsetParent(只读) offsetTop(只读) offsetLeft(只读) offsetHeight(只读) offsetWidth(只读) 2.滚动尺寸scroll scrollWidth(只读) scrollHeight(只读) scrollLeft(可写) scrollTop(可写) 3.关于client clientWidth(只读) clentHeight(只读) clientLeft(只读) clientTop(只读) 4.关于client

JavaScript的DOM_获取节点的类型

node 节点类型:节点可以分为元素节点.属性节点和文本节点,而这些节点又有三个非常有用的属性,分别为:nodeName.nodeType 和 nodeValue. <script type="text/javascript"> window.onload = function(){ var box = document.getElementById('box'); alert(box); //[object HTMLDivElement]元素节点对象 alert(box.