zoukankan      html  css  js  c++  java
  • javascript整理——DOM

    DOM(Document Object Model ):文档对象模型,也是HTML和XML文档的编程接口,简单来说就是一个接口,只不过是用javascript来实现的

    任意的文档都可以绘制成树状结构,如下图

    document——>就是一个对象,这个对象指代的是这个文档。

    document对象下面有一些方法,这个方法可以获取到某个或者某一组元素节点:

    • document.getElementsById()   //通过id获取(IE8及以下,获取元素ID不区分大小写)
    • document.getElementsByTagName()  //通过标签名获取一组元素,哪怕只有一个元素,也会封装到对象(类数组对象,可以直接当数组用)
    • document.getElementsByName()  //通过name属性来进行获取,老版本的浏览器只有部分标签(指表单标签)好使,本身name属性在开发中只会添加到表单中
    • document.getElementsByClassName()  //通过类名来获取一组元素,如果只想获取其中的某一个那么写成document.getElementsByClassName()[x] x代表下标
    • document.guerySelector("css选择器")  //如果有多个只会获取第一个
    • document.guerySelectorAll("css选择器")  

           最后两个方法有缺点,基本不会用:

                          1.IE7及以下不支持

                          2.非实时 以现在的状态为标准,后面做增删改查都不会发生变化,也就是非实时

    在DOM中,文档是由节点构成的集合,而节点又分为不同的类型。节点的三种类型:元素节点  文本节点  注释节点

      1.元素节点比如<head>  <title>  <a> <body> <html>   // <html>是<head>的父节点,<title>是<head>的子节点,<body>是<head>的兄弟节点

      2.文本节点写入的文字 比如<div>内容</div> div为元素节点,而内容就是文本节点

      3.注释节点也就是你注释里的文字

    节点:

    parentNode //父节点
    firstChild  //第一个子节点
    lastChild  //最后一个子节点
    nextSibling  //下一个兄弟节点
    previousSibling  //上一个兄弟节点
    parentElement  //父元素元素节点
        
    children  //子元素元素节点们
    firstElementChild //第一个子元素节点
    lastElementChild  //最后一个子元素节点
    previousElementSibling  //上一个兄弟元素节点
    nextElementSibling  //下一个兄弟元素节点
    
    children.length  //子元素节点们的个数
    childElementCount   //就是个数

    节点的属性:

    1.   nodeName  节点的名字 只能读不能修改
    2.   nodeValue  节点的内容 text节点和comment节点中的内容,可读可修改
    3.   nodeType  节点类型

                 元素节点——> 1       属性节点——> 2      文本节点——>3   注释节点——>8      document——>9    DocumentFragment——>文档节点     碎片——>11

    方法:hasChildNodes()  判断是否有子节点  

    知道了节点的属性和方法,那么就来看看一个题:封装一个函数,取出所有的元素节点,不能使用children

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Document</title>
    </head>
    <body>
        <div>
            <span></span>
            <p></p>
            <a href=""></a>
        </div>
    </body>
    </html>
    var div = document.getElementsByTagName("div")[0];//获取元素节点
    function getElement(div){
        var nodes = div.childNodes;//获取子节点们
        var elementnode = [];  //元素节点定义为数组
        for(var i = 0;i<nodes.length;i++){  //循环节点
           if(nodes[i].nodeType == 1){  //如果节点类型为1
              elementnode.push(nodes[i]); //把节点为1的节点放进元素节点数组中
           }
        }
                
        return elementnode; //返回元素节点数组
    }
    console.log(getElement(div)) //输出元素节点

    dom方法存在的位置:

        1.  getElementById()定义在Document.prototype上面,Element上面不能使用

        2.getElementsByName()定义在HTMLDocument.prototype上面,XML是不能使用这个方法

        3.getELementsByTagName()定义在Document.prototype上面和Element.prototype上面

        4.HTMLDocument.prototype上面定义了一些属性body head

                document.head——>指代head标签

                 document.body——> 指代body标签

        5.Document.prototype上面定义了documentElement属性

                document.documentElement     ——>   指代html标签

        6.getElementsByClassName(),querySelector(),querSelectoeAll(),Documenet,prototype和Elment.prototype上面都有定义

    DOM操作

       创建节点:(只是创建了节点,但是没有插入到页面中)

             document.createElement()  创建元素节点   

    var div = document.createElement("div");
    div.innerHTML = "这个是刚刚创建的div"

             document.createTextNode()  创建文本节点    

    var text = document.createTextNode("hello world");

             document.createcOMMENT()  创建注释节点

    var comment = document.createComment("this is comment")

       插入操作:

            parent.appendChild()   //选择父级元素,插入为最后一个子元素,插入页面已有的元素,为剪贴操作   

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Document</title>
    </head>
    <body>
        <div class="divbox">
            <span>this is span</span>
            <a href="">this is a</a>
            <p>this is p</p>
        </div>
        <div class="divbox2">
            hello world
        </div>
    </body>
    </html>
    var divbox = document.getElementsByClassName("divbox")[0];//获取class为divbox的元素节点
    var divbox2 = document.getElementsByClassName("divbox2")[0];//获取class为divbox2的元素节点
    divbox.appendChild(divbox2); //选择divbox为父级,divbox2作为最后一个子元素插入

            parent.insertBefore(a,b)  插入a在b之前

       删除操作:

           parent.removeChild()  不是真正的删除,而只是拿出来一下,有其他地方要用到这个节点又会自动还原

          child.remove()   真正的删除

       替换操作:

           parent.replaceChild(new,old)   用new去替换old

    innerHTML、innerText和textContext的区别:

       innerHTML:指元素里的html判断

       innerText:纯文本 老版本的火狐不支持

       textContext:纯文本 老版本的IE不支持

         

  • 相关阅读:
    概率论基础
    感知机
    CSS3实现jquery的特效
    有品质的生活
    table点击一行显示下一行的特效
    colspan在浏览器中失效的问题
    css的框架——common.css
    使用 document.onreadystatechange()来判断页面加载完
    iframe中子页面通过js计算高度(使得页面不会显示不全)
    js返回上一页并刷新的多种方法
  • 原文地址:https://www.cnblogs.com/jrrrrr/p/9267915.html
Copyright © 2011-2022 走看看