美文网首页
2019-03-06 DOM对象

2019-03-06 DOM对象

作者: 千里一线缘 | 来源:发表于2019-03-06 18:04 被阅读0次

    DOM对象概述

    DOM(Document Object Model)对象即文档对象模型,是html和xml的编程接口,

    DOM对象由核心 DOM,HTML DOM,XML DOM三部分组成, 其中我们主要接触的是

    HTML DOM, HTML DOM定义了访问和操作html文档的标准编程接口和方法。

    DOM 以树结构表达 HTML 文档,如下图:

    image

    HTML DOM 节点

    在html中一切内容都是节点

    • 整个文档是文档节点

    • 每个HTML元素是元素节点

    • HTML元素内的文本是文本节点

    • 属性有属性节点

    • 注释有注释节点

    这些节点共同组成了节点树:

    image

    节点之间的关系

    DOM节点之间的关系和我们人类也很相似,毕竟是我们人类发明规范的,也有父子,兄弟的关系。

    如图:

    image

    从图中可以看出:

    • 在DOM树中有一个根节点,也就是html节点

    • html有多个子(child)节点,每个子节点又有自己的父(parent)节点和子节点

    • 在同一个父节点下的节点互为兄弟(sibling)节点

    HTML DOM 方法

    1. 获取元素的方法

      • 通过ID获取元素 getElementById();

      var id = document.getElementById('id名');

      • 通过元素名称获取元素,获取的是该元素的元素列表

      var lis = document.getElementsByTagName('元素名称');

      • 通过类名称获取元素,获取的是名称为该类名的元素列表(有兼容问题,ie8即以下不支持)

      var lis = document.getElementsByClassName('元素名称');

      • html5新增元素选择器querySelector()和 querySelectorAll();(有兼容问题,ie8即以下不支持)

        var id = document.querySelector('#id'); //获取id元素,id名称前需加#

        var calssName = document.querySelector('.calssName'); //获取类元素,类名前需加.

        querySelector()和 querySelectorAll()的区别

        • querySelector() 获取的是单个元素,querySelectorAll()获取的是元素列表(多个元素)

        • 用法相同

        var calssNames = document.querySelectorAll('.calssName'); //获取类元素,类名前需加.

    2. 操作元素的方法

      • 属性方法innerHTML和innerText

        • innerHTML获取HTML内容(包括html标签)

        • innerText 获取文本内容(不包括html标签)

        如下例所示:

        
        <p>hello word</p>
        
        
        
        var p = docuement.querySelector('p');
        
        console.log(p.innerHTML); // <p>hello word</p>
        
        console.log(p.innerText);  //hello word
        
        

      也可以用innerHTML和innerText来修改内容

       > p.innerHTML = "新文本!";
      
       * 节点之间关系的访问与操作
      
           * parentNode  获取某元素的父节点
      
           * childNodes 获取某元素的子节点
      
           * children获取某元素的子节点
      
           * firstChild 获取某元素的第一个子节点
      
           * lastChild 获取某元素的最后一个子节点
      
           * previousSibling 获取某元素的上一个兄弟节点
      
           * nextSibling 获取某元素的下一个兄弟节点
      
       例子:
      
       ```html
      
       <ul>
      
             <li>第一个节点</li>
      
             <li class="child">第一个节点</li>
      
             <li>第一个节点</li>
      
       </ul>
      
       ```
      
       ```javaScript
      
         var ul = document.querySelector('ul');
      
         var childs = ul.childNodes;  //获取该元素的子节点
      
         var firstChild = ul.firstChild ;
      
         var lastChild = ul.lastChild ;
      
         var child = document.querySelector('child');
      
         var parent = child.parentNode;
      
         var lastNode = child.nextSibling;
      
         var prevNode = child.previousSibling;
      
       ```
      
      • 操作节点增,删,改

        1. 创建元素节点createElement和createTextNode(创建文本节点)

        2. 添加子节点appendChild()和insertBefore()在指定的子节点前面插入新的子节点

        3. 删除子节点 removeChild()

        4. 替换子节点 replaceChild()

        实例:

        
        <div id="div1"
        
                <p id="p1">这是一个段落。</p>
        
                <p id="p2">这是另一个段落。</p>
        
        </div>
        
        
        
            var para=document.createElement("p");
        
            var node=document.createTextNode("这是一个新段落。");
        
            para.appendChild(node);
        
            var element=document.getElementById("div1");
        
            element.appendChild(para);
        
            var child=document.getElementById("p1");
        
            element.replaceChild(para,child);
        
            element.removeChild(child);
        
        

        常用方法总结:

        方法 | 描述

        ------------ | ------------

        getElementById() | 返回带有指定 ID 的元素。

        getElementsByTagName() | 返回包含带有指定标签名称的所有元素的节点列表(集合/节点数组)

        getElementsByClassName() | 返回包含带有指定类名的所有元素的节点列表(集合/节点数组)

        querySelector() | 返回选定的某个元素

        querySelectorAll() | 返回选定的某个名称的所有元素的节点列表(集合/节点数组)

        createElement() | 创建元素节点

        createTextNode() | 创建文本节点

        appendChild() | 把新的子节点添加到指定节点

        insertBefore() | 在指定的子节点前面插入新的子节点

        removeChild() | 删除子节点

        replaceChild() | 替换子节点

        节点类型:

        节点 | 对应的nodeType属性值 | 对应的常量

        --------- | --------- | ------

        文档节点(document)| 9 | Node.DOCUMENT_NODE

        元素节点(element)| 1 | Node.ELEMENT_NODE

        属性节点(attr)| 2 | Node.ATTRIBUTE_NODE

        文本节点(text)| 3 | Node.TEXT_NODE

        文档片断节点(DocumentFragment)| 11 | Node.DOCUMENT_FRAGMENT_NODE

        文档类型节点(DocumentType)| 10 | Node.DOCUMENT_TYPE_NODE

        注释节点(Comment)| 8 | Node.COMMENT_NODE

        节点关系:

        节点属性 | 描述

        ----------------- | ---------------

        parentNode | 获取某元素的父节点

        childNodes | 获取某元素的子节点列表

        children() | 获取某元素的子节点列表

        firstChild | 获取某元素的第一个子节点

        lastChild | 获取某元素的最后一个子节点

        previousSibling | 获取某元素的上一个兄弟节点

        nextSibling | 获取某元素的下一个兄弟节点

    参考和扩展阅读

    w3cschool DOM

    JavaScript 教程(阮一峰)DOM

    相关文章

      网友评论

          本文标题:2019-03-06 DOM对象

          本文链接:https://www.haomeiwen.com/subject/grmxpqtx.html