DOM

作者: 大庆无疆 | 来源:发表于2019-02-20 23:38 被阅读0次

1、DOM(文档树 ):文档对象模型(把网页当成对象的方式来描述), 是树形结构

2、节点:元素节点、属性节点、文本节点(开始标签和结束标签内的内容
)、注释节点
html的所有内容都可以称之为节点

获取body标签对象 ----> var body = document.body;
获取html标签对象 ----> var html = document.documentElement;

节点的一些属性和方法:

属性
(1)nodeName:节点的名字(如果是元素节点的话,是标签的名称)
(2)nodeType:节点的类型(属性值是数值。1代表元素节点,2代表属性节点,3代表文本节点)
(3)nodeValue:节点的值(如果是元素节点,值为null)
方法:
(1)hasChildNodes()判断元素下是否含有子节点,但是注意的是,他不但会判断元素节点,也会判断文本节点等其他节点

获取父节点和子节点

(1)parentNode属性 父节点,只有一个
(2)childNodes属性 子节点,可以没有值,一个或多个值(会把文本节点,元素节点,注释节点都保存进去)--->浏览器兼容有问题,不推荐使用
(3)children 子节点(只保存元素节点)

<body>
    <div id='box'>
        <span class="cc">我是span</span>
        <a href="javascript:">我是a标签</a>
    </div>
    <p>我是段落</p>
    <script type="text/javascript">
        parentNode 父节点,只有一个
        childNodes 子节点,没有,一个或多个(会把文本节点,元素节点,注释节点都保存进去)--->浏览器兼容有问题,不推荐使用
        children 子节点(只保存元素节点)-->推荐使用

        获取div元素
        var box = document.getElementById('box');
        使用childNodes属性获取字节点,返回是一个节点列表
        var childs = box.childNodes;
        从中找出子节点是元素节点。思路:根据元素节点的nodeType为1来查找
        for(var i=0; i<childs.length; i++) {
            if(childs[i].nodeType === 1) {
                console.dir(childs[i]);
            }
        }

        使用parentNode获取父节点
        var parentNode = box.parentNode;
        console.dir(parentNode);

        使用children获取子节点,返回一个集合
        var child = box.children;
        console.log(child);

    </script>
</body>

获取父节点中的第一个和最后一个子元素节点

获取第一个子节点 firstChild属性
获取最后个子节点 lastChild属性
获取第一一个子节点(子元素) firstElementChild属性-->有兼容问题,就是在IE9及以下都不支持该属性
获取最后一个子节点(子元素) lastElementChild属性-->有兼容问题,就是在IE9及以下都不支持该属性

        获取第一个子节点    firstChild属性
        获取最后个子节点    lastChild属性
        获取第一一个子节点(子元素) firstElementChild属性
        获取最后一个子节点(子元素)  lastElementsChild属性

        // 获取元素
        var box = document.getElementById('box');
           获取第一个子节点 firstChild属性
        var fc = box.firstChild;
        console.log(fc);    //输出的是#text(第一个文本节点)

          获取最后一个子节点
        var lc = box.lastChild;
        console.log(lc);    //输出的是#text(最后个文本节点)
          根据上面两个情况得知lastChild和firstChild返回的节点是父节点所有子节点中的第一个和最后一个


          获取最后一个子节点(子元素)
        var fec = box.firstElementChild;
        console.log(fec); //输出<span>我是span</span>

          获取最后一个子节点(子元素)
        var lec = box.lastElementChild;
        console.log(lec);   //输出<abbr>缩略</abbr>
          得知以上两种返回的是子节点中的元素节点

  兼容问题
firstElementChild,lastElementsChild虽然可以直接得到父节点中的最后一个和第一个子元素。
但是有兼容问题,就是在IE9及以下都不支持该属性,下面给出了处理方式:
我们可以创建一个函数,如getFirstElementChild(element),函数里面先使用children获取到所有的子元素节点,判断哪个是第一个字节点并返回

        function getFirstElementChild(element) {
            // 获取父节点的所有子元素节点
            var nodes = element.children;
            //获取第一个子元素
            var node = nodes[0];
            // 返回元素
            return node;
        }

        function getLastElementChild(element) {
            // 获取父节点的所有子元素节点
            var nodes = element.children;
            //获取最后一个子元素
            var node = nodes[nodes.length-1];
            // 返回元素
            return node;
        }

获取兄弟节点

previousSibling--->获取前一个兄弟节点
previousElementSibling--->获取前一个兄弟节点(元素)//有兼容问题,IE8及以下不能用
nextSibling--->获取下一个兄弟节点
nextElementSibling--->获取下一个兄弟节点(元素)//有兼容问题,IE8及以下不能用

相关文章

  • dom 级别和dom 事件处理

    dom级别:dom0 dom1 dom2 dom3 dom事件处理:dom0 dom2 dom3 (1级DOM标准...

  • WY-DOM编程

    DOM Document Object Model DOM Core DOM HTML DOM Style DOM...

  • DOM事件

    DOM级别与DOM事件 DOM级别:DOM0级、DOM1级、DOM2级、DOM3级DOM事件:DOM0级事件处理、...

  • DOM事件

    DOM级别与DOM事件 DOM级别:DOM0级,DOM1级,DOM2级和DOM3级DOM事件:DOM0级事件处理,...

  • js红包雨活动

    function Block( dom ){ this.dom = dom; //dom this.parentW...

  • DOM操作的分类

    DOM操作分为三个方面,即DOM Core(核心)、HTML-DOM和CSS-DOM。 DOM Core DOM ...

  • 虚拟 DOM 和 diff 算法

    虚拟 DOM(Virtual DOM) 通过 JS 对象表示 DOM 结构,虚拟DOM 是对 DOM 的抽象 通常...

  • jQuery——DOM

    DOM操作分类 一般来说,DOM操作分为3个方面,即DOM Core、HTML-DOM、CSS-DOM。 DOM ...

  • JavaScript高级程序设计前四章

    1. DOM级别 1.1 DOM1级 由DOM核心(DOM Core)和DOM HTML两个模块组成。 DOM核心...

  • DOM分级详解

    DOM1 级(DOM Level 1) DOM1 级由两个模块组成:DOM核心(DOM Core)和DOM HTM...

网友评论

      本文标题:DOM

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