JavaScriptDOM
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():创建一个包含着给定文本的新文本节点。这个方法的返回值是一个指向
