DOM文档对象模型
DOM介绍
- js操作html文档的API
- 1998年10月DOM1级规范成为W3C的推荐标准
- IE中的所有DOM对象都是以COM对象的形式实现的
实例化
-
通过dom拿到我们想要的节点
-
通过dom创建节点
//通过dom创建节点 //创建一个LI节点 var node = document.creatElement("LI"); //创建一个text节点 var textNode = document.creatTextNode("Hello"); //将text节点追加到li节点上 node.appendChild(textNode); //找到id为myDiv的节点 var myDiv = document.getElementById("myDiv"); //将刚刚创建的node节点追加为myDiv的子节点 myDiv.appendChild(node);
节点类型
-
Document类型:表示整个html文档
-
属性:
- body 直接指向body元素
- head 获取html头部内容
- title 获取文档标题
- doctype 获取<!DOCTYPE>属性 兼容性不太强 很少用
- URL 获取完整的URL
- domain 获取域名
- referrer 获取链接到当前页面的那个页面的url
- images 获取页面所有的img对象 返回值HTMLCollection
- forms 获取所有的form表单对象 返回值HTMLCollection
- links 获取文档中带有href属性的a元素
-
方法:
- getElementById() //通过元素的id获取元素节点
- 作用:通过元素的id获取元素节点
- 调用者:
- 参数:想要获取的元素id
- 返回值:找到的第一个元素,如果没有,返回null,
- getElementsByClassName() //通过元素的类名获取元素节点
- 作用:通过元素的class name 获取元素节点
- 调用者:document
- 参数:为一个字符串,表示元素的类名 可以由空格隔开
- 返回值:HTMLCollection 包含一个或多个元素 可以使用数组的操作方式去处理结果
- getElementsByTagName() //通过标签名获取元素节点
- 作用:通过元素的元素名(标签名)找到对应的元素
- 调用者:document
- 参数:为一个字符串 表示元素的元素名(标签名)
- 返回值:HTMLCollection list 包含一个或多个元素 可以使用数组的操作方式去处理结果
- getElementsByName() //通过元素的name属性获取元素节点
- 作用:通过元素的name属性找到对应的元素
- 调用者:document
- 参数:为一个字符串 表示元素的name属性
- 返回值:NodeList list 包含一个或多个元素,可以使用数组的操作方式去处理结果
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> </head> <body> <div class="app"> div.app </div> <div class="app app2"> div.app2 </div> <div id="app"> div#app </div> <form action="get" name="formApp"></form> </body> <script> var classApp = document.getElementsByClassName("app app2"); console.log(classApp[1]); var idApp = document.getElementById("app"); console.log(idApp); var myDivs = document.getElementsByTagName("div"); console.log(myDivs); var myName = document.getElementsByName("formApp"); console.log(myName); </script> </html>
- getElementById() //通过元素的id获取元素节点
-
-
Element类型
- 属性:
- id 元素在文档中的唯一标识符
- title 有关元素的附加说明信息
- className 与元素class特性对应 可以重复 可以有多个 用空格分割
- src img元素具有的属性
- alt img元素具有的属性
- lang 元素内容的语言代码,很少使用
- dir 语言方向 ltr,rtl 左到右,右到左
- 自定义属性
- 设置属性 setAttribute();
- 作用:给获取到的元素设置属性
- 调用者:要设置属性的元素
- 参数:两个参数 (属性名 对应的值)
- 返回值:
- 注意:要设置的值存在的话 修改原来的值 不存在的话 添加
- 获取属性 getAttribute();
- 作用:获取到的相应元素的某个属性
- 调用者:元素
- 参数:属性名
- 返回值:对应的属性值
- 移除属性 removeAttribute()
- 作用:移除相应元素的某个属性
- 调用者:元素
- 参数:属性名
- 返回值:对应的属性值
- 设置属性 setAttribute();
- 属性:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<div class="one">
</div>
<div class="one" id="myDiv" style="color: brown;">
<img src="" alt="">
</div>
</body>
<script>
//自定义属性
var node = document.getElementsByClassName("one")[0];
console.log(node);
node.className = "two";
//设置属性
node.setAttribute("class","three");
//获取属性
console.log(node.getAttribute("class"));
var myDiv = document.getElementById("myDiv");
console.log(myDiv.getAttribute("id"));
console.log(myDiv.getAttribute("style"));
//移除属性
myDiv.removeAttribute("id");
console.log(myDiv);
</script>
</html>
- 创建元素 creatwElement();
- 作用:创建一个dom元素节点
- 调用者:document
- 参数:一个参数,要创建元素的标签名 在html中不区分大小写 但是在XML中区分
- chidren
1. firstElementChild 某个节点的第一个孩子元素节点
2. lastElementChild 某个节点的最后一个孩子元素节点
3. nextElementSibling 某个节点的下一个兄弟元素节点
4. previousElementSibling 某个节点的上一个兄弟元素节点
5. childElementCount 该节点子元素的数量
6. innerHTML 返回元素的内容
7. textContent 该元素的内部的text
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<div class="one" id="myDiv">
<div class="div1-1">1</div>
<div class="div1-2">2</div>
<div class="div1-3">3</div>
<div class="div1-4">4</div>
</div>
</body>
<script>
//children
var myDiv = document.getElementById("myDiv");
console.log(myDiv);
//找到div1-1 第一个孩子元素节点
console.log(myDiv.firstElementChild); //div1-1
//找到最后一个孩子元素节点
console.log(myDiv.lastElementChild); //div1-4
//获取下一个兄弟元素节点
console.log(myDiv.firstElementChild.nextElementSibling); //div1-2
//获取上一个兄弟元素节点
console.log(myDiv.lastElementChild.previousElementSibling); //div1-3
//获取子元素的数量
console.log(myDiv.childElementCount); //4
</script>
</html>
- Text类型
- length 文本长度
- appendData(text)
- 作用:给文本节点追加文本
- 调用者:文本节点
- 参数:要追加的文本内容
- deleteData(beginIndex,count)
- 作用:删除文本
- 调用者:文本节点
- 参数:要删除文本的开始索引值,以及删除文本数量
- insertData(beginIndex,text)
- 作用:插入文本
- 调用者:文本节点
- 参数:要插入的开始位置的索引值,插入的文本内容
- replaceData(beginIndex,count,text)
- 作用:替换文本
- 调用者:文本节点
- splitText(beginIndex)
- 作用:将一个文本节点分为两个
- 调用者:文本节点
- 返回值:分割好文本结点
- substringData(beginIndex,count)
- 作用:从beginIndex开始提取count个子字符串
- 调用者:文本节点
- createTextNode()
- 作用:创建文本节点
- 调用者:document
- 参数:文本内容
- 返回值:node
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<!-- 文本节点 -->
<div>hello,world</div>
</body>
<script>
var div = document.getElementsByTagName("div")[0];
//获取文本内容
console.log(div.innerHTML); //hello,world
console.log(div.textContent); //hello,world
//获取文本长度
console.log(div.innerHTML.length); //11
//追加文本
var textNode = document.createTextNode("hello");
textNode.appendData("world");
console.log(textNode); //"helloworld"
//获取已有的文本节点 注:因为获取节点是对象类型,所以下面给节点增加或删除文本内容,会引起原文本改变
console.log(div.firstChild); //"hello,world" ----> "hello,world!!!!!!" ----> "hllo,world!!!!!!"
var textNode = div.firstChild;
console.log(textNode.nodeName); //#text
textNode.appendData("!!!!!!");
console.log(textNode); //"hello,world!!!!!!" ----> "hllo,world!!!!!!" ----> "hello,world!!!!!!"
textNode.deleteData(1,1); //"hllo,world!!!!!!" ----> "hello,world!!!!!!"
//插入文本
textNode.insertData(1,"e");
console.log(textNode1); //"hello,world!!!!!!"
</script>
</html>
- Comment类型
- 方法:
- 创建注释节点
- 获取注释节点
- 方法:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Comment类型</title>
</head>
<body>
<div class="app">
<!-- 这是注释 -->
</div>
</body>
<script>
//获取注释节点
var commentNode = document.getElementsByClassName("app")[0].firstChild.nextSibling;
console.log(commentNode); //<!-- 这是注释 -->
console.log(commentNode.nodeName); //#comment
//创建注释节点
var cNode = document.createComment("这是一个注释");
</script>
</html>