zoukankan      html  css  js  c++  java
  • 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


     

     

     



  • 相关阅读:
    Python 字符串
    python 元组用法
    python 字典用法
    环境配置
    桥式整流以及电容作用
    三角序列的正交性
    MDS
    ISOMAP
    randperm
    数据库~Mysql里的Explain说明
  • 原文地址:https://www.cnblogs.com/jalja/p/4691932.html
Copyright © 2011-2022 走看看