JavaScriptDOM

DOM:Document Object Model(文本对象模型)

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。

——D:文档-html文档或xml文档

——O:对象-document对象的属性和方法

——M:模型

——DOM是针对xml(html)的基于树的api

——DOM树:节点(node)的层次

——DOM把一个文档表示为一棵家谱树(父、子、兄弟)

——DOM定义了Node的接口以及许多种节点类型来标识xml节点的多个方面。

 

1.节点及其类型:

1)元素节点

2)属性节点:元素的属性,可以直接通过属性的方式来操作。

3)文本节点:是元素节点的子节点,其内容为文本。

 

第一个helloworld文档

 

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script type="text/javascript">
        //1.当整个HTML文档完全加载成功后触发window.onload事件。
        //事件触发时,执行后面function里面的函数体
        window.onload = function () {
            //2.获取所有的button节点,并取得第一个元素
            var click = document.getElementsByTagName("button")[0];
            //3.为button的onclick事件赋值:当点击button时,执行函数体。
            click.onclick = function () {
                //4.弹出警告框helloworld
                alert("helloworld");
            }
        }
    </script>
</head>
<body>
    <button>Click</button>
</body>
</html>

 

  

2.JS代码写在哪里

(1)

 

    <!--HTML代码和js代码耦合在一起-->
    <button onclick="alert('helloworld');">Click</button>

 

(2)

 

<body>
    <button>Click</button>
</body>
</html>
<!--
    在整个HTML文档被加载后,获取其中的节点,
    把script节点放在html文档的最后
    但不符合些JS代码的习惯
-->
<script type="text/javascript">
    //1.获取button
    var btns = document.getElementsByTagName("button");
    alert(btms.length);

    //2.为button添加onclick事件
    btns[0].onclick = function () {
        alert("helloworld");
    }
</script>

 

(3)标准

    <script type="text/javascript">
        //window.onload事件在整个html文档被完全加载后出发执行。
        //所以在其中可以获取到html文档的任何元素
        window.onload = function () {
            
        }
    </script>
</head>
<body>
    <button>Click</button>
</body>

  

3.如何获取元素节点:

  1)document.getElementById:根据id属性获取对应的单个节点

  2)document.getElementsByTagName:根据标签名获取指定的节点名

  3)document.getElementsByName:根据节点的name属性获取符合条件的节点数组

 

4.获取属性节点:

  1)可以直接通过cityNode.id这样的方式获取和设置属性节点的值

  2)通过元素节点的getAttributeNode方法来获取属性节点,然后再通过nodeValue来读写

 

    <script type="text/javascript">
        //window.onload事件在整个html文档被完全加载后出发执行。
        //所以在其中可以获取到html文档的任何元素
        window.onload = function () {
            //1.获取#city节点的所有子节点
            var cityNode = document.getElementById("city");
            //2.利用元素节点的childNodes方法可以获取指定元素节点的所有子节点
            //但该方法不实用,包含文本节点(空白的部分)
            alert(cityNode.childNodes.length);
            //3.获取#city节点的所以li子节点(实用)
            var cityLiNodes = cityNode.getElementsByTagName("li");
            alert(cityLiNodes.length);

            //4.获取指定节点的第一个子节点和最后一个子节点(实用)
            alert(cityNode.firstChild);
            alert(cityNode.lastChild);
        }
    </script>

 

5.获取元素节点的子节点

1)childNodes属性获取全部的子节点

2)firstChild属性获取第一个子节点

3)lastChild属性获取最后一个子节点

 

6.获取文本节点:

1)步骤:元素节点-->获取元素节点的子节点

2)若元素节点只有文本节点一个子节点

例如:

 

<li id="bj" name="BeiJing"> 北京</li>
可以先获取到指定的元素节点eleNode,
然后利用eleNode.firstChild.nodeValue的方法来读写其文本节点的值
        window.onload = function () {
            //文本节点一定是元素节点的子节点
            //1.获取文本节点所在的元素节点
            var bjNode = document.getElementById("bj");
            //2.通过firstChild定义到文本节点
            var bjTextNode = bjNode.firstChild;
            //3.通过操作文本节点的nodeValue属性来读写文本节点的值
            alert(bjTextNode.nodeValue);

            bjTextNode.nodeValue = "尚硅谷";
        }
       window.onload = function () {

            var cityLi = document.getElementsByTagName("li");
            for (var i =0;i<cityLi.length;i++){
                cityLi[i].onclick = function () {
                    alert(i);//8
                }
            }
        }

  

7..节点的属性:

1)nodeName:代表当前节点的名字,只读属性。如果给定节点是一个文本节点,nodeName

2)nodeType:返回一个整数,这个数值代表着给定节点的类型,只读属性。

3)nodeValue:返回给定节点的当前值(字符串),可读写的属性

  <1>元素节点:返回值为null

  <2>属性节点:返回值是这个属性的值

  <3>文本节点:返回值是这个文本节点的内容

 

  window.onload = function () {

            //1.元素节点的3个属性
            var bjNode = document.getElementById('bj');
            alert(bjNode.nodeType);//元素节点:1
            alert(bjNode.nodeName);//节点名:li
            alert(bjNode.nodeValue);//元素节点没有nodeValue属性值:null

            //2,属性节点
            var nameAttr = document.getElementById("name").getAttributeNode("name");
            alert(nameAttr.nodeType);//属性节点:2
            alert(nameAttr.nodeName);//属性节点的节点名:属性名name
            alert(nameAttr.nodeValue);//属性节点的nodeValue属性值:属性值

            //3.文本节点
            var textNode = bjNode.firstChild;
            alert(textNode.nodeType);//文本节点:3
            alert(textNode.nodeName);//文本节点的节点名#text
            alert(textNode.nodeValue);//文本节点的nodeValue属性值:文本值
            
        }

 

  nodeType、nodeName是只读的

  而nodeValue是可以被改变的

  以上三个属性,只有在文本节点中使用nodeValue读写文本值时使用最多。

 

 

  

实验一:提示框为文本节点内容

 

    <script type="text/javascript">
        window.onload = function () {

            var cityLi = document.getElementsByTagName("li");
            for (var i =0;i<cityLi.length;i++){
                cityLi[i].onclick = function () {
                    alert(this.firstChild.nodeValue);
                }
            }
        }
    </script>

 

实验二:li节点的文本值没有^^开头,加上,有,则去除。

 

    <script type="text/javascript">
        window.onload = function () {
            var reg = /^\^{2}/g;
            var cityLi = document.getElementsByTagName("li");
            for (var i =0;i<cityLi.length;i++){
                cityLi[i].onclick = function () {
                    var val = this.firstChild.nodeValue;
                    if (reg.test(val)) {
                        val = val.replace(reg,"");
                    }else {
                        val = "^^"+val;
                    }
                    this.firstChild.nodeValue = val;
                }
            }
        }
    </script>

 

  

 

8.创建一个元素节点:

  1)createElement():按照给定的标签名创建一个新的元素节点。方法只有一个参数:被创建的方法的返回值,是一个指向新建节点的引用指针。返回值是一个元素节点,所以它的nodeType属性值等于1.

  新元素节点不会自动添加到文档里,他只是一个存在于javascript上下文的对象。

 

9.创建一个文本节点:

  1)createTextNode():创建一个包含着给定文本的新文本节点。这个方法的返回值是一个指向

 

扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄