原生JS根据class获取节点,并且获取子节点,节点批量添加class和删除class
x
xiezixing
发布于 12 天前
在操作dom中,我们常常需要使用各种方法获取节点,并且获取到节点之后批量添加class样式或者删除class样式。这里做一个记录,方便以后查询。
获取节点的方法
根据class获取节点数组
const a = document.getElementsByClassName() //根据class名获取节点数组。
根据id获取节点
const a = document.getElementById() //根据id获取节点,不是数组
根据元素标签名获取节点
const a = document.getElementsByTagName('元素的标签名') //节点数组
根据元素name属性获取节点,常用于表单的获取。
const a = document.getElementsByName() //节点数组
根据css选择器获取节点
document.querySelector() // 获取一个
document.querySelectorAll() // 获取多个
获取子节点的方法
直接通过选择器
var a = document.getElementById("test").getElementsByTagName("div");
通过childNodes
var a = document.getElementById("test").childNodes;
通过children
var a = document.getElementById("test").children[0];
通过firstChild
var a = document.getElementById("test").firstChild; //可能为空。
通过firstElementChild
var a = document.getElementById("test").firstElementChild;
同理有lastChild和lastElementChild
获取父节点
1. parentNode获取父节点
var p = document.getElementById("test").parentNode;
2. parentElement获取父节点
parentElement和parentNode一样,只是parentElement是ie的标准。
var p1 = document.getElementById("test").parentElement;
3. offsetParent获取所有父节点
一看offset我们就知道是偏移量 其实这个是于位置有关的上下级 ,直接能够获取到所有父亲节点, 这个对应的值是body下的所有节点信息。
var p2 = document.getElementById("test").offsetParent;
获取兄弟节点的方式
1. 通过获取父亲节点再获取子节点来获取兄弟节点
var brother1 = document.getElementById("test").parentNode.children[1];
2. 获取上一个兄弟节点
在获取前一个兄弟节点的时候可以使用previousSibling和previousElementSibling。他们的区别是previousSibling会匹配字符,包括换行和空格,而不是节点。previousElementSibling则直接匹配节点。
var brother2 = document.getElementById("test").previousElementSibling;
var brother3 = document.getElementById("test").previousSibling;
3. 获取下一个兄弟节点
同previousSibling和previousElementSibling,nextSibling和nextElementSibling也是类似的。
var brother4 = document.getElementById("test").nextElementSibling;
var brother5 = document.getElementById("test").nextSibling;
批量修改节点的class
const changes = document.getElementsByClassName("hotschange");
const changebuttons = changes[0].getElementsByTagName("button");
for (let index = 0; index < changebuttons.length; index++) {
const element = changebuttons[index];
element.classList.remove("active");
element.classList.add("delete");
} //使用forEach和map都会失败。
相关文章推荐
评论区
暂未开放
相关文章推荐