JS学习九:DOM节点
一、DOM
DOM:文档对象模型(document object model),DOM是访问HTML和操作HTML的标准。即document对象。
DOM分类:
- Core DOM:核心DOM,针对任何结构变化文档的标准模型
- XML DOM:针对XML文档的标准模型
- HTML DOM:针对HTML文档的标准模型
DOM节点的分类:
- 文档节点
- 元素节点(标签节点)
- 属性节点
- 文本节点
- 注释节点
DOM节点层级关系--DOM树:
- 父节点parent node:父节点拥有任意数量的子节点。
- 子节点child node:子节点只能拥有一个父节点
- 兄弟节点sibling node:拥有相同父节点的同级节点
- 根节点root node:一个HTML文档一般只有一个根节点HTML,根节点没有父节点,是最上层的节点。
祖先节点:包含子节点的节点都可以叫做祖 先节点。其中包括了父节点。
后代节点:一个节点内包含的所有节点,叫做后代节点。其中,包括了子节点。
JS跟页面中标签进行交互:
- 1.获取标签节点,修改标签属性,修改标签CSS样式
- 2.创建标签
- 3.删除标签
- 4.复制标签
- 5.插入标签
二、获取标签(元素)节点
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <script src="js/test.js" type="text/javascript" charset="utf-8"></script> </head> <body style="height: 3000px;"> <div id="idDiv"></div> <div class="classDiv"></div> <div class="classDiv"></div> <div class="classDiv"></div> <div class="classDiv"></div> <div class="classDiv"></div> <input type="text" name="inputText" /> <input type="text" name="inputText" /> <input type="text" name="inputText" /> <script type="text/javascript"> //找到要操作的标签对象,如#idDiv var jsDiv = document.getElementById("idDiv") console.log(jsDiv) console.log(typeof(jsDiv)) </script> </body> </html>
结果:<div id="idDiv"></div>
结果:object
示例:查找class属性值为classDiv的标签
var jsDivs = document.getElementsByClassName("classDiv") console.log(jsDivs) console.log(typeof(jsDivs)) 结果: HTMLCollection(5) [div.classDiv, div.classDiv, div.classDiv, div.classDiv, div.classDiv] 结果:object
从上图可以看出,找到的标签对象,有众从的方法和属性。
查找name为inputTextinput标签,
<script type="text/javascript"> var jsDiv = document.getElementsByName("inputText") console.log(jsDiv) console.log(typeof(jsDiv)) console.log(jsDiv[0].offsetTop) 结果:NodeList(3) [input, input, input] 结果:object </script>
查找所有DIV节点:
var jsAllDivsArr = document.getElementsByTagName("div") console.log(jsAllDivsArr) console.log(typeof(jsAllDivsArr))
结果:HTMLCollection(6) [div#idDiv, div.classDiv, div.classDiv, div.classDiv, div.classDiv, div.classDiv, idDiv: div#idDiv]
结果:object
三、获取属性节点
方式一:元素节点.属性名称
使用以上示例的文档:
<script type="text/javascript"> var jsDiv = document.getElementsByName("inputText") var typeNode = jsDiv[0].type console.log(jsDiv) // 结果:NodeList(3) [input, input, input] console.log(typeNode) // 结果: "text" console.log(typeof(typeNode)) //结果:string console.log(typeNode.toString()) // 结果: "text" </script>
<body style="height: 3000px;"> <input type="text" id="in" name="inputText" placeholder="请输入姓名" my="你的姓名"/> <script type="text/javascript"> //先找到标签 var jsInput = document.getElementById("in") //再找属性节点 //方式一:获取官方定义的属性直接使用,元素节点.属性名,即可得到元素对应属性的属性值 var typeNode = jsInput.type; console.log(typeNode); //结果:"text" console.log(typeof(typeNode)); //结果:string var placeholderNode = jsInput.placeholder; console.log(placeholderNode); //结果:”请输入姓名" console.log(typeof(placeholderNode)); //结果:string </script> </body>
修改属性值:
<body style="height: 3000px;"> <button onclick="func()">修改属性</button> <input type="text" id="in" name="inputText" placeholder="请输入姓名" my="你的姓名"/> <script type="text/javascript"> var jsInput = document.getElementById("in") function func () { jsInput.placeholder = "哈哈"; } </script> </body>
方式二:元素节点.getAttribute("属性名称")
<button onclick="func()">修改属性</button> <input type="text" id="in" name="inputText" placeholder="请输入姓名" my="你的姓名"/> <script type="text/javascript"> var jsInput = document.getElementById("in") //方法二: 元素节点.getAttribute("属性名"):得到元素对应属的属性值 //该方法不仅可以获取官方定义的属性的属性值,也可以获取自定义的属性的属性值 console.log(jsInput.my) //结果:undefined。使用方法一,不能获取到自定义属性的属性值 console.log(jsInput.getAttribute("my")) //结果: "你的姓名" </script>
准确地说,上面是获取元素节点的属性。
获取元素节点的属性节点示例:
<button onclick="func()">修改属性</button> <input type="text" id="in" name="inputText" placeholder="请输入姓名" my="你的姓名"/> <script type="text/javascript"> //先找到标签 var jsInput = document.getElementById("in") var typeNode = jsInput.getAttributeNode("type") console.log(typeNode); //结果: type对象 console.log(typeof(typeNode)); //结果:object var placeholderNode = jsInput.getAttributeNode("placeholder"); console.log(placeholderNode); //结果: placeholder对象 console.log(typeof(placeholderNode)); //结果:object </script>
修改自定义属性的属性值:
<body style="height: 3000px;"> <button onclick="func()">修改属性</button> <input type="text" id="in" name="inputText" placeholder="请输入姓名" my="你的姓名"/> <script type="text/javascript"> var jsInput = document.getElementById("in") function func () { jsInput.setAttribute("my", "哈哈"); console.log(jsInput.getAttribute("my")); } </script> </body>
移除、新增、修改属性:
<body style="height: 3000px;"> <button onclick="func()">修改属性</button> <input type="text" id="in" name="inputText" placeholder="请输入姓名" my="你的姓名"/> <script type="text/javascript"> var jsInput = document.getElementById("in") function func () { jsInput.removeAttribute("my"); //移除一个属性 jsInput.setAttribute("myxxx", "xxx") // 修改或增加一个属性 console.log(jsInput); //<input type="text" id="in" name="inputText" placeholder="请输入姓名" myxxx="xxx"> } </script> </body>
四、获取文本节点
<button onclick="func()">修改</button> <div id="box">我是个盒子</div> <script type="text/javascript"> //先找到标签 var jsDiv = document.getElementById("box") // 使用元素节点.innerHTML,找到元素的文本,不包括标签 console.log(jsDiv.innerHTML) //我是个盒子 console.log(typeof(jsDiv.innerHTML)) // string // 使用元素节点.outerHTML,找到元素的文本和标签,包括标签 console.log(jsDiv.outerHTML) //<div id="box">我是个盒子</div> console.log(typeof(jsDiv.outerHTML)) // string // 使用元素节点.outerText,找到元素的文本,不包括标签,不包括文本中可能包含的标签 console.log(jsDiv.outerText) // 我是个盒子 console.log(typeof(jsDiv.outerText)) // string function func(){ jsDiv.innerHTML = "我是个<h1>盒子</h>" console.log(jsDiv.innerHTML) // 我是个<h1>盒子</h1> console.log(typeof(jsDiv.innerHTML)) // string console.log(jsDiv.outerHTML) // <div id="box">我是个<h1>盒子</h1></div> console.log(typeof(jsDiv.outerHTML)) // string console.log(jsDiv.outerText) //我是个盒子 console.log(typeof(jsDiv.outerText)) // string } </script>
posted on 2018-11-18 18:44 myworldworld 阅读(122) 评论(0) 收藏 举报