原生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都会失败。

相关文章推荐
评论区
暂未开放
相关文章推荐