js定位DOM元素

转载 2015年07月11日 10:05:15

获取元素的位置属性可以通过

  • HTMLElement.offsetLeft
  • HTMLElement.offsetTop

但是,这两个属性所储存的数值并不是该元素相对整个浏览器画布的绝对位置,而是相对于其父元素位置的相对位置,也就是说这两个数值得到的是以其 父元素左上角为(0,0)点从而计算出的数值。所以我们要得到她的绝对位置,那么我们必须依次向上获取他的父元素的位置,然后获取它父元素的父元素的offersetLeft和offersetTop,一直递归到浏览器的整个画布横纵距离的时候,例如

/*获取元素的纵坐标*/
function getTop(e){
   
var offset=e.offsetTop;
   
if(e.offsetParent!=null){
     offset
+=getTop(e.offsetParent);
   }         
   
return offset;
}
/*获取元素的横坐标*/
function getLeft(e){
   
var offset=e.offsetLeft;
   
if(e.offsetParent!=null){
      offset
+=getLeft(e.offsetParent);
   } 
   
return offset;

 获取元素的绝对位置,无非是根据元素距浏览器左边(left)和顶部(top),我们可以稍稍改变一下得到一方法

function getElemPos(obj){
        
var pos = {"top":0"left":0};
         
if (obj.offsetParent){
           
while (obj.offsetParent){
             pos.top 
+= obj.offsetTop;
             pos.left 
+= obj.offsetLeft;
             obj 
= obj.offsetParent;
           }
         }
else if(obj.x){
           pos.left 
+= obj.x;
         }
else if(obj.x){
           pos.top 
+= obj.y;
         }
         
return {x:pos.left, y:pos.top};
}

offsetParent属性返回一个对象的引用,这个对象是距离调用offsetParent的元素最近的(在包含层次中最靠近的),并且是已进行过CSS定位的容器元素。 如果这个容器元素未进行CSS定位, 则offsetParent属性的取值为根元素(在标准兼容模式下为html元素;在怪异呈现模式下为body元素)的引用。 当容器元素的style.display 被设置为 "none"时(译注:IE和Opera除外),offsetParent属性 返回 null。

 

句法:

parentObj = element.offsetParent

变量:

· parentObj 是一个元素的引用,当前元素的偏移量在其中计算。

 

 

复制代码
代码
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Untitled Document</title>
<script type="text/javascript" language="JavaScript">
    
function offset_init() {
        
var pElement = document.getElementById("sonObj");
        parentObj 
= pElement.offsetParent;
        alert(parentObj.tagName);
    }
</script>
</head>
<body onload="offset_init()">
<div id="parent">
<id="sonObj">测试OffsetParent属性</p>
</div>
</body>
</html>
复制代码

 

 

测试结果:
       Firefox3:"BODY"
       Internet Explorer 7:"BODY"
      Opera 9.51:"BODY"
      Chrome 0.2:"BODY"
      Safari 3:"BODY

结论:
        当某个元素及其DOM结构层次中元素都未进行CSS定位时(absolute或者relative)[或者
某个元素进行CSS定位时而DOM结构层次中元素都未进行CSS定位时
],则这个元素的offsetParent属性的取值为根元素。更确切地说,这个元素的各种偏移量计算(offsetTop、offsetLeft等)的参照物为Body元素。(其实无论时标准兼容模式还是怪异模式,根元素都为Body元素)

 

测试代码2

 

 

复制代码
代码
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Untitled Document</title>
<style type="text/css">
#parent 
{
    position
: absolute; <!-- position:relative; -->
    left
: 25px;
    top
: 188px;
    border
: 1px solid black;
}
</style>
<script type="text/javascript" language="JavaScript">
    
function offset_init() {
        
var pElement = document.getElementById("sonObj");
        parentObj 
= pElement.offsetParent;
        alert(parentObj.tagName);
    }
</script>
</head>
<body onload="offset_init()">
<div id="parent">div测试代码
<id="sonObj">测试OffsetParent属性</p>
</div>
</body>
</html>
复制代码

 

 

测试结果:
         Firefox3:"DIV"
         Internet Explorer 7:"DIV"
        Opera 9.51:"DIV"
        Chrome 0.2:"DIV"
        Safari 3:"DIV"

结论:
      当某个元素的父元素进行了CSS定位时(absolute或者relative),则这个元素的offsetParent属性的取值为其父元素。更确切地说,这个元素的各种偏移量计算(offsetTop、offsetLeft等)的参照物为其父元素

 

测试代码3

复制代码
代码
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Untitled Document</title>
<style type="text/css">
#Grandfather 
{
    position
: relative;
    left
: 25px;
    top
: 188px;
    border
: 1px solid black;
}
</style>
<script type="text/javascript" language="JavaScript">
    
function offset_init() {
        
var pElement = document.getElementById("sonObj");
        parentObj 
= pElement.offsetParent;
        alert(parentObj.tagName);
    }
</script>
</head>
<body onload="offset_init()">
<h1 id="Grandfather">
<div id="parent">
<id="sonObj">测试OffsetParent属性</p>
</div>
</h1>
</body>
</html>
复制代码

 

 

测试结果:
        Firefox3:"H1"
        Internet Explorer 7:"H1"
       Opera 9.51:"H1"
       Chrome 0.2:"H1"
       Safari 3:"H1"
结论:
         当某个元素及其父元素都未进行CSS定位时(absolute或者relative),则这个元素的offsetParent属性的取值为在DOM结构层次中距离其最近,并且已进行了CSS定位的元素。


js获取dom元素位置来定位元素

js获取dom元素位置来定位元素。 DOM的定义如下图   获取元素的位置属性可以通过 HTMLElement.offsetLeftHTMLElement.offsetTo...
  • GregOfNeu
  • GregOfNeu
  • 2014年09月03日 19:36
  • 4036

js获取dom元素绝对位置

http://www.51xuediannao.com/qd63/index.php/page-2-82-1.html 获取元素的位置属性可以通过 HTMLElement....
  • NRlovestudy
  • NRlovestudy
  • 2016年04月29日 17:33
  • 3130

通过DOM方式去定位 几种查找元素的方法

//先定义DOMDocument对象  $doc = new DOMDocument('1.0','utf-8');  $doc ->load('config.xml');  //我们定位元素是...
  • mz_shenbian
  • mz_shenbian
  • 2013年03月06日 19:23
  • 1528

原生js给DOM元素添加一个或者多个类的方法总结

先看两个例子: html: 啦啦啦 css: .test{ width: 100px; height: 100px; background: #B6BAC4; } .test...
  • qq_34645412
  • qq_34645412
  • 2017年12月28日 20:33
  • 324

js--DOM2--元素遍历

1.DOM2 级遍历?DOM2 级遍历DOM结构的类型:NodeIterator和TreeWalker,两者都是深度优先的DOM结构遍历1.NodeIterator–较简单使用document.cre...
  • github_34514750
  • github_34514750
  • 2016年11月04日 15:39
  • 618

04——javascript Dom 动态创建元素 操作样式

——采自传智播客的教学笔记(手打难免有错)
  • kkcjs
  • kkcjs
  • 2016年11月08日 20:31
  • 987

js给dom元素绑定事件的三种方式

在JavaScript中,有三种常用的绑定事件的方法: 在DOM元素中直接绑定;在JavaScript代码中绑定;绑定事件监听函数 一. 在DOM元素中直接绑定 这里的DOM元素,可以理解为H...
  • RedaTao
  • RedaTao
  • 2017年10月14日 16:25
  • 825

javascript DOM的操作,更新,遍历,添加

介绍javascript DOM的操作,更新,遍历,添加 首先列出来HTML代码等待嵌套脚本 摩卡咖啡 ...
  • qq_34069180
  • qq_34069180
  • 2017年02月17日 20:00
  • 686

js之DOM操作(替换元素节点replaceChild())

替换元素节点replaceChild() replaceChild 实现子节点(对象)的替换。返回被替换对象的引用。  语法: node.replaceChild (newnode,oldnod...
  • u010359143
  • u010359143
  • 2015年09月21日 17:48
  • 4131

js dom元素的选取

1.获取节点:根据元素Id获取元素document.getelementById("元素Id"),值是一个object 根据元素name获取元素document.getelementByName("...
  • u010032648
  • u010032648
  • 2014年04月24日 19:32
  • 671
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:js定位DOM元素
举报原因:
原因补充:

(最多只允许输入30个字)