JS 操作 DOM

定义:文档对象模型(Document Object Model,DOM)是一种用于HTML和XML文档的编程接口。它给文档提供了一种结构化的表示方法,
可以改变文档的内容和呈现方式

节点:(例如:<div id="属性节点">测试</div>)

   元素节点:标签元素<div>

   文本节点:标签内的所有纯文本 “测试”

      属性节点 :标签的属性   ‘id’

  IE 浏览器是以com实现的DOM 返回一个Object
一、获得元素节点
  var ele = document.getElementById("purchases");//根据ID获得DOM   没有 返回 null (IE5-  不兼容)

  var eles = document.getElementsByTagName("li");//根据元素名获得DOM集合
  var eless = document.getElementsByTagName("*");//*匹配符 获得文档中所有的DOM集合

二、获得属性值  getAttribute()  此方法兼容性不好。

       getAttribute('属性名字'); 根据属性名 获得属性值 (自定义的属性也可以);

      getAttribute("style");   非IE 返回style 属性值(字符串类型)       IE返回的是object类型
  var pAttr=ele.getAttribute("title");//获得ele节点的title属性值
三、设置属性值
  setAttribute("属性名","属性值"); //根据给属性重新赋值

  ele.setAttribute("title","ul_title"); //把ele节点的title属性值设置未ul_title

      注意:对于 style/onclick 属性 使用setAttribut( )方法  赋值 IE7- 不兼容 

四、移除元素属性 removeAttribute('属性名')  IE6-  不存在

五、操作元素节点的文本

   1..获得元素节点的纯文本 nodeValue

             $p.childNodes[0].nodeValue; //获得$p 元素节点的纯文本内容

    2. innerHTML 可以获得元素节点的文本信息(包括HTML标签) 非W3C 标准

              var text= document.getElementById("ul").innerHTML;

              可以给元素节点赋值(包括标签元素)

             document.getElementById("ul").innerHTML="<span>AAAAAA</span>";

六 、获得元素节点的标签名

         var tagName=$dom.nodeName;

          var tagName=$dom.tagName;  两种方式等价

七、层次节点

      nodeType:判断当前节点类型是什么

           .如果只希望遍历元素节点,建议使用nodeType属性则更为直接方便! 
    nodeType==1:表示元素节点
    nodeType==2:表示属性节点
    nodeType==3:表示文本节点

      1. childNodes属性返回元素的所有子节点,包含了文本节点与元素节点。

         例如:<div id="test">测试文本一<em>斜体文本</em>测试文本二</div>

                  var len=document.getElementById("test").childNodes.length; 等于3

                    第一个子节点是文本节点: 测试文本一       

                    第二个子节点是元素节点:<em>斜体文本</em>

                    第三个子节点是文本节点: 测试文本二

           获得 第一个子节点:

                    document.getElementById("test").childNodes[0] ==document.getElementById("test").firstChild;

          获得 最后一个子节点: 

                   document.getElementById("test").childNodes[len-1] ==document.getElementById("test").lastChild;

          获得上一个兄弟节点: document.getElementById("test").childNodes[1].previousSbiling;

      获得下一个兄弟节点: document.getElementById("test").childNodes[1].nextSbiling;

          获得父类节点: document.getElementById("test").childNodes[1].parentNode;

    2. children 获得元素的忽略空行的子节点    非W3c标准支持IE5+

<ul id="ul">
  <li>AAAAAA</li>
  <li>AAAAAA</li>
  <li>AAAAAA</li>
  <li>AAAAAA</li>
</ul>

var $p=document.getElementById("ul");
alert($p.childNodes.length); //9
alert($p.children.length);//4
View Code

八、操作属性节点

          <div id="ul" title="无序列表" class="ulc">AAAAAAAAAAAAAAA</div>

      var $p=document.getElementById("ul").attributes;  //获得 NamedNodeMap 类型
                 var $p1=$p[0].nodeName;  等于 class    //从后往前遍历

       var titleValue=$p['title'].nodeValue;  等于 ulc 

九、创建节点

       1.创建元素节点     

    var $ul=document.getElementById("ul");
    var $li=document.createElement("li");//只是创建了一个li元素节点只是在内存中 还没有添加到文档上;
    $ul.appendChild($li);//给 $ul 追加一个 子元素
    var text=document.createTextNode("测试文本"); //创建文本
    $li.appendChild(text); // 将文本 添加到 $li 元素中
    var $p=document.createElement("p"); //创建p元素
    $ul.parentNode.insertBefore($p,$ul);// 在$ul元素节点前添加$p元素节点

    //IE7- 不兼容
    var input=document.createElement("input");
    input.setAttribute("type","radio");
    input.setAttribute("name","sex");
    $ul.parentNode.insertBefore(input,$ul);

十、常用方法

        innerHTML   

               1.获得文本 (包括HTML标签)

               2.赋值文本 如果文本包含标签也可以

       innerTEXT 

      1.获得文本   过滤掉HTML标签     火狐不支持  使用textContent 

var html=document.documentElement;//获得HTML元素节点
var body=document.body;//获得body元素节点
var title=document.title;//获得页面title属性值
var url=document.URL;//获得页面路径  页面必须在服务器打开
var imgs=document.images;//获得页面的img元素集合
var doc=document.compatMode;//获得浏览器模式 CSS1Compat:标准模式  BackCompat:怪异模式
var width=document.documentElement.clientWidth; // 获得页面宽度 IE 在 CSS1Compat:标准模式 下
var width=document.body.clientWidth;  // 获得页面宽度 IE 在BackCompat:怪异模式 下
var show=document.getElementById("div").scrollIntoView();//将指定的节点滚动到可见区域
View Code
var $ul=document.getElementById("ul");
var li=$ul.firstChild;
var flag=$ul.contains(li);//判断li是否是$ul的子元素 火狐3.6+支持 其他浏览器均支持
var flag1=$ul.compareDocumentPosition(li);// flag1 >16 表示li是$ul的子元素   火狐3.6- 

//兼容性写法一个元素(refNode)是另一个元素(otherNode)的父元素 返回 boolen类型值
function myContains(refNode,otherNode){
    if(typeof refNode.contains!='undefined'){
        return refNode.contains(otherNode);
    }
    else if(typeof refNode.compareDocumentPosition=='function'){
        return refNode.compareDocumentPosition(otherNode)>16;
       }
 }
View Code

 十一、DOM元素尺寸

  方式一  获得元素尺寸 返回值是字符串 这两种方式 只能获得css定义的尺寸 如果加padding值不会计算实际尺寸
1、   var box=document.getElementById("box");
    var width=box.style.width;//获得行内  内连样式

2、  var style=window.getComputedStyle?window.getComputedStyle(box,null):null || box.currentStyle;
   var height=style.height;//如果没值IE=auto 非IE=默认大小

   方式二    获得计算后的实际尺寸(如果单位不是px 则自动计算为px单位) number类型 默认单位是px
            边框和外边距不算入实际值 内边距和滚动条算入实际值
             如果没有设置尺寸 没有设置内边距和滚动条 非IE=默认大小 IE=0
    var width2=box.clientWidth;
    var height2=box.clientHeight;

   方式三   获得元素实际尺寸 对于内边距和边框计算实际值 边框和外边距不算入实际值 浏览器都支持 (推荐使用)
    var width3=box.offsetWidth;
    var height3=box.offsetHeight;

十二、获得元素位置

  1、获得元素相对于父元素的位置 当前元素要加上样式 position:relative;left:10px;top:10px;
    var top=box.offsetTop;
    var left=box.offsetLeft;

 2、获得元素相对于根元素的位置 IE存在兼容问题
  var top=box.getBoundingClientRect().top;
  var left=box.getBoundingClientRect().left;
  var right=box.getBoundingClientRect().right;
  var bottom=box.getBoundingClientRect().bottom;

//兼容性写法
function getRect(ele){
var rect=ele.getBoundingClientRect();
var clientTop=document.documentElement.clientTop;
var clientLeft=document.documentElement.clientLeft;
return {
  top:rect.top-clientTop,
  bottom:rect.bottom-clientTop,
  left:rect.left-clientLeft,
  right:rect.right-clientLeft
  };
}
View Code


 

 

 



原文地址:https://www.cnblogs.com/jalja/p/4691932.html