JavaScript DOM 获取任意元素 节点类型 节点名称属性
前端 JavaScript DOM 和 BOM 学习目录
4. DOM attribute property style属性 className属性 classList属性 Data
获取任意元素 - function
-
- getElementById : 就是实现的是我们的通过标签中的 id 属性实现获取得到元素节点
- getElementsByName: 就是实现的是通过 name 属性来实现获取我们的元素节点
- getElementsByTagName: 就是实现的是通过我们的标签名来实现获取元素节点
- getElementsByClassName: 就是实现的是通过我们的类名来实现获取元素节点
- querySelector: 就是实现的是我们的同元素的 CSS-Selector 来实现获取单个元素节点
- querySelectorAll 就是实现的是通过 CSS-Selector 来获取多个满足条件的元素节点
熟练使用 1 4 5 6 即可, 5 和 6 当前使用得最多
-
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> </head> <body> <div class="container"> <h2>我是标题</h2> <div class="box"> <p> 我是段落标签 </p> </div> <div id="box"> 我是盒子 </div> </div> <script> // 通过节点和元素之间的导航实现让我们的 h2 中的显示为红色 document.body.children[0].children[0].style.color = "red" // 通过直接获取标签实现改变字体颜色为 天蓝色 document.getElementsByTagName("h2")[0].style.color = "skyblue" // 使用我们得 querySelector console.dir(document.querySelector(".box")) document.querySelector(".box").style.backgroundColor = "red" // 使用我们得 querySelectorAll console.dir(document.querySelectorAll(".box")) // 是一个伪数组 </script> </body> </html>
节点类型 - nodeType
-
我们的一个 HTML 文档中的节点类型含有:
- commentNodeType : 就是我们的注释节点
- textNodeType : 就是我们的文本节点
- elementNodeType : 就是我们的元素节点
实现获取我们的节点类型的时候,我们使用的方法就是使用的是我们的 .nodeType 来实现获取的节点类型
实现获取的时候,最终得到的节点就是返回的我们的 number
-
获取方式 值 描述desc Node.ELEMENT_NODE 1 获取的就是我们的 元素节点 or
Node.TEXT_NODE 3 就是实现获取的就是我们的一个 HTML 文档中的 文本内容 Node.COMMENT_NODE 8 就是实现获取的是 HTML 文档中的 注释内容 Node.DOCUMENT_NODE 9 获取的就是我们的 Document 节点 Node.DOCUMENT_TYPE_NODE 10 实现获取的就是我们的 文档说明 <!DOCTYPE html><!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> </head> <body> <!-- 我是注释 --> 我是文本 <div class="box">我是盒子</div> <script> var bodyChildNodes = document.body.childNodes console.log(bodyChildNodes) console.log("=======================") // 开始实现获取我们的每一个节点 for(var item of bodyChildNodes) { console.log(item) // 实现获取我们的节点的类型: 文本节点 注释节点 元素节点 console.log(item.nodeType) } console.log("========================") console.log(Node.ELEMENT_NODE) console.log(Node.TEXT_NODE) console.log(Node.COMMENT_NODE) console.log(Node.DOCUMENT_NODE) console.log(Node.DOCUMENT_TYPE_NODE) </script> </body> </html>
节点名称属性 - nodeName
- nodeName 就是实现的是获取节点名称, tagName 就是实现的是获取标签名称,这个只是对元素节点有用
-
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> </head> <body> <!-- 我是注释 --> 我是文本 <div class="box">我是盒子</div> <script> var bodyChildNodes = document.body.childNodes // 为什么会多一个 #text 出来,是因为在文档中最开始的时候就出现了我们的 换行操作,这个也是我们的文本 console.log(bodyChildNodes[0].nodeName) // #text Node.TEXT_NODE console.log(bodyChildNodes[1].nodeName) // #comment Node.COMMENT_NODE console.log(bodyChildNodes[2].nodeName) // #text Node.TEXT_NODE console.log(bodyChildNodes[3].nodeName) // DIV Node.ELEMENT_NODE console.log(bodyChildNodes[4].nodeName) // #text Node.TEXT_NODE </script> </body> </html>
节点内容属性 - innerHTML | innerText | nodeValue
-
获取节点内容的三种方法:
- innerHTML : 就是获取节点的中的元素节点以及文本节点,元素内容以及文本内容全部实现获取
- innerText: 就是实现的是我们的获取一个节点中的文本节点,只是文本内容
- **data(nodeValue) **: 针对非元素的节点实现获取数据
注意,我们是可以通过这个方法来实现我们的赋值进行修改网页中原本的内容
outerHTML 实现的不仅仅是获取节点内部的内容,还实现获取了节点本身
-
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> </head> <body> <!-- 我是注释 --> 我是文本 <div class="box">我是盒子</div> <script> var bodyChildNodes = document.body.childNodes console.log(bodyChildNodes[3].innerHTML) console.log(bodyChildNodes[3].innerText) console.log(bodyChildNodes[1].data) console.log(bodyChildNodes[1].nodeValue) console.log(bodyChildNodes[3].outerHTML) </script> </body> </html>
节点全局属性 - hidden
-
使用我们的这个属性是可以实现设置我们的元素的显示模式的改变的
设置为了为 hidden ,那么最终的呈现的效果就是元素以及内部的内容会在页面中消失
其背后真真的实现的效果就是我们的改变元素的 CSS 属性: display: none;
-
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> </head> <body> <div class="box">我是盒子</div> <button class="btn">控制盒子的显示</button> <script> // 先实现获取元素节点 var divEl = document.querySelector(".box") var btnEL = document.querySelector(".btn") var i = 1 // 然后对元素实现具体操作 btnEL.onclick = function() { console.log(`我被点击了${i}次`) divEl.hidden ? divEl.hidden = false : divEl.hidden = true i++; } </script> </body> </html> - 实际上的话,上面的就是 vue 框架中的 v-for 底层代码的实现的一个简化的代码
拓展
现在的的框架开发前端实际上是不建议多操作 DOM
jquery框架: 设计的时候只是为了简化 DOM 的书写,但是没实质上的减少 对 DOM 的操作
vue框架: 设计的时候,就是为了减少开发人员对 DOM 操作
react库: 设计的时候,是通过的我们的虚拟DOM 来实现的减少 DOM 的使用的
但是最终的话,基本上所有的框架的底层的实现代码都还是在操作我们的 DOM 的,所以说,DOM对于我们后面的深入学习有帮助的
😄 😄 😄 😄