JS 节点笔记
h5新增自定义属性
为了保存并使用数据,有一些数据不必要保存到数据库中;
data开头作为自定义属性并赋值
兼容性获取element.getAttribute("data-自定义属性名")
h5新增element.dataset.属性名 或者element.dataset['属性名']
注意
如果自定义属性有多个连接起来的 获取的时候一定要用驼峰命名法
<div class="conter" id="conter"></div>
1 <div class="conter" id="conter"></div> 2 var div = document.getElementById("conter") 3 4 div.setAttribute("data-index", 1) 5 6 div.setAttribute("data-list-name", 1000) 7 // getAttribute获取 8 console.log(div.dataset); 9 console.log(div.getAttribute("class")); 10 console.log(div.getAttribute("data-index")); 11 12 // h5新增获取自定义属性方法 13 console.log(div.dataset.index); 14 console.log(div.dataset["index"]); 15 16 console.log(div.dataset.listName); 17 console.log(div.dataset["listName"]);
节点操作
利用节点层次关系获取元素
元素节点 nodeType为1
属性节点 nodetype为2
文本节点 nodeType为3 文本节点包括文字、空格、换行等
节点层次
父子兄层次关系
1、父级节点
node.parentNode
得到的是离他最近的节点 如果没有父节点就返回null
1 <div class="box"> 2 <span class="erweima">2</span> 3 <ul class="ul"> 4 <li>2</li> 5 <li>2</li> 6 </ul> 7 </div> 8 var box = document.querySelector("box") 9 console.log(box); 10 // 父节点parentNode 11 var erweima = document.querySelector(".erweima") 12 // 得到的是离他最近的节点 如果没有父节点就返回null 13 console.log(erweima.parentNode);
子节点
parentNode.children 非标准 但是现在的浏览器都支持
子节点childNode 获取到所有的子节点 包括换行
1 <ol class="ol"> 2 <li>123</li> 3 <li>123</li> 4 <li>123</li> 5 <li>123</li> 6 <li>123</li> 7 </ol> 8 // 子节点childNode 获取到所有的子节点 包括换行 9 var ul = document.querySelector(".ul") 10 // console.log(ul.childNodes); 11 console.log(ul.children); 12 13 var ol = document.querySelector(".ol") 14 // firstChild获取到的是第一个节点 15 console.log(ol.firstChild); 16 // lastchild获取到的啊最后一个节点 17 console.log(ol.lastChild); 18 19 20 // 兼容性问题不推荐使用 ie9以上支持 21 console.log(ol.firstElementChild); 22 console.log(ol.lastElementChild); 23 24 // 实际开发常用的是 25 console.log(ol.children[0]); 26 console.log(ol.children[ol.children.length - 1]);
兼容性问题
node.previousElementSibling 得到上一个元素节点
node.nextElementSibling 得到下一个元素节点
1 <div class="group">ssss</div> 2 <span>4556</span> 3 var div = document.querySelector(".group") 4 console.log(div.nextSibling); 5 console.log(div.nextElementSibling); 6 console.log(div.previousElementSibling);
创建节点
document.createElement("节点名")
node.appendChild(child) 后面追加元素类似于数组的push
node.insertBefore(child,指定元素) 在指定元素前面添加元素
注意
我们想要在页面添加元素首先要先创建元素然后再添加元素
<ul class="ul2"> <li>123</li> </ul> <script> // 创建节点 var li = document.createElement("li") var lis = document.createElement("li") // 添加节点node.appendChild(child) node父节点 child是子节点 var ul = document.querySelector(".ul2") ul.appendChild(li) ul.insertBefore(lis, ul.children[0]) </script>
删除节点
node.removeChild(child) 删除父元素中的一个子节点
1 <button class="button2">删除</button> 2 <ul class="ul3"> 3 <li>1</li> 4 <li>12</li> 5 <li>13</li> 6 </ul> 7 <script> 8 var ul = document.querySelector(".ul3") 9 var btn = document.querySelector(".button2") 10 btn.onclick = function () { 11 if (ul.children.length == 0) { 12 this.disabled = false 13 } else { 14 ul.removeChild(ul.children[0]) 15 } 16 17 18 } 19 </script>
复制节点
node.cloneNode() 如果括号里面是空的或者是false就只复制了标签 不复制内容 如果括号里面是true 就可以复制内容
1 <ul class="ul4"> 2 <li>1</li> 3 <li>16</li> 4 <li>12</li> 5 <li>13</li> 6 </ul> 7 <script> 8 var ul = document.querySelector(".ul4") 9 var lis = ul.children[0].cloneNode(true); 10 ul.appendChild(lis) 11 </script>