# DOM 操作
# 获取节点
getElementById(): // 通过ID获取元素,返回元素对象
getElementsByName(): // 通过name属性获取元素,返回数组
getElementsByTagName(): // 通过标签名获取元素,返回数组
getElementsByClassName(): // 通过`class`获取元素,返回数组
querySelector(): // 获取指定节点的第一个
querySelectorAll(): // 获取符合条件的节点,返回数组
getElementById().nodeName; // 获取节点的名称
注意:低版本的IE<8不支持querySelector
和querySelectorAll
。IE8仅有限支持。
# 获取/设置属性值
// 返回对应属性的属性值
element.getAttribute(name)
// 传入属性名及设置的值
element.setAttribute(name, value)
// 可设置class、自定义属性...
element.setAttribute('class', 'div1')
element.setAttribute('data-id', '1')
// 删除元素节点的属性
element.removeAttribute(name)
# 创建、添加、删除、克隆
createElement()
: 创建标签createTextNode()
: 创建文本appendChild()
: 添加到元素尾部
// 页面已有元素
const oh = document.getElementById("div");
// 创建标签
const h1 = document.createElement('h1')
// 创建文本节点
const txt = document.createTextNode("这是一个新的段落。")
h1.appendChild(txt); // 将文本节点添加到 <h1> 元素中
oh.appendChild(h1); // 添加到元素内部
oh.removeChild(h1); // 删除元素指定节点
cloneNode(true) // 克隆节点,true:克隆节点及其属性,以及后代;false:克隆节点本身
replaceChild(a, b) // 替换节点,参数(插入的节点,被替换的节点)
// 没有+号,则是全部覆盖,反之,追尾相加
h1.innerHTML += `hh<p>2<p>`; // 会对html标签转化
h1.innerText += `hh<p>2<p>`; // 按字符串处理
insertBefore()
: 添加到元素前面insertAfter()
: 添加到元素后面
javascript 有 insertBefore
方法,却没有提供 insertAfter
方法。所以我们得自己动手丰衣足食!
// insertBefore
// 将 newEl 添加到 targetEl 之前
parentEl.insertBefore(newEl, targetEl)
// insertAfter
// 将 newEl 添加到 targetEl 之后
function insertAfter(newElement, targetElement) {
let parent = targetElement.parentNode
if (parent.lastChild == targetElement) {
parent.appendChild(newElement)
} else {
parent.insertBefore(newElement, targetElement.nextSibling)
}
}
# 获取父/子/同级节点
// 包括文本节点、注释节点即回车、换行、空格、文本等等
parentNode // 返回当前元素的父节点对象
childNodes // 获取所有子节点
firstChild // 第一个子节点
lastChild // 最后一个子节点
nextSibling // 下一个兄弟节点
previousSibling // 上一个兄弟节点
// 只获取元素节点
children // 所有子节点
parentElement // 父节点
firstElementChild // 第一个子节点
lastElementChild // 最后一个子节点
nextElementSibling // 返回元素的下一个兄弟元素节点
previousElementSibling // 返回元素的上一个兄弟元素节点
// 返回节点的类型,数字形式(1-12)
// 常见几个1:元素节点,2:属性节点,3:文本节点。
nodeType
# 操作class
const oh = document.getElementById("div");
oh.classList.add('hello') // 添加class,可多个
oh.classList.remove('hello') // 删除class,可多个
oh.classList.toggle('hello') // 切换class,可多个
oh.classList.contains('hello') // 是否存在class,返回Boolen
oh.classList.length // 多少个类
oh.className = 'hello'; // 所有class被覆盖,可多个