节点操作
2025年1月10日大约 3 分钟
类名修改
className
获取或修改类名,替换整个类名字符串
<div id="div" class="test1 test2 test3">className Test</div>
<script>
  var oDiv = document.getElementById('div')
  console.log(oDiv.className) // test1 test2 test3
</script>classList
一个特殊的对象,它具有
add/remove/toggle单个类的方法
elem.classList.add(class): 添加/类elem.classList.remove(class): 删除类elem.classList.toggle(class):如果类不存在就添加类,存在就移除它elem.classList.contains(class):检查给定类,返回true/false
<div id="div" class="test1 test2 test3"></div>
<script>
  var oDiv = document.getElementById('div')
  console.log(oDiv.classList) // DOMTokenList(3) ['test1', 'test2', 'test3', value: 'test1 test2 test3']
  console.log(Array.from(oDiv.classList)) // (3) ['test1', 'test2', 'test3']
  for(let name of oDiv.classList){
    console.log(name) // 依次打印 test1、test2、test3
  }
</script>样式修改
style
是一个对象,它对应于
style属性中所写的内容
- 对于多词属性,使用驼峰式 camelCase
 
<div id="div">Test</div>
<script>
  var oDiv = document.getElementById('div')
  oDiv.style.color = "#f00"
</script>style.cssText
完全重写元素
style属性内容
<div id="div">Test</div>
<script>
var oDiv = document.getElementById('div')
console.log(oDiv.style.cssText) // 空
oDiv.style.cssText=`
    background-color: red;
    width: 100px;
  `;
console.log(oDiv.style.cssText) // background-color: red; width: 100px;
console.log(oDiv.style.width) // 100px
console.log(oDiv.style.backgroundColor) // red
  
oDiv.style.backgroundColor = '#f00'
console.log(oDiv.style.backgroundColor) // rgb(255, 0, 0)
</script>getComputedStyle(elem, [pseudo])
读取 CSS 中最终应用到元素上的的样式值
elem:需要被读取样式值的元素pseudo:(可选的)伪元素,空字符串或无参数代表元素本身
注意
单位要添加到值上
style.top.top = '20px'通过
style.* = str的方式设置某个样式后,可以再次通过style.* = ''的方式来重置为设置之前的样式
创建节点
createElement(tag)
创建元素节点
document.createElement('div')createTextNode(text)
创建文本节点
document.createTextNode('Hello World!')插入节点
下面方法的参数可以是一个要插入的任意的 DOM 节点列表,或者文本字符串
<div id="div"></div>
<script>
  div.before('<p>Hello</p>', document.createElement('hr'));
</script>append、prepend、before、after、replaceWith:插入字符串时,参数都被作为文本插入,而不是作为 HTML 代码,因此像<、>这样的符号都会被作转义处理来保证正确显示
append()
在
node末尾 插入节点或字符串
prepend()
在
node开头 插入节点或字符串
before()
在
node前面 插入节点或字符串
after()
在
node后面 插入节点或字符串
replaceWith()
将
node替换为给定的节点或字符串
insertAdjacentHTML(where, html)
将字符串作为 HTML 插入
该方法的第一个参数是代码字,指定相对于
elem的插入位置。必须为以下之一beforebegin:将html插入到elem之前afterbegin:将html插入到elem开头beforeend:将html插入到elem末尾afterend:将html插入到elem之后
还有两个类似的方法
elem.insertAdjacentText(where, text)、elem.insertAdjacentElement(where, elem)- 语法一样,只是一个是作为文本插入,一个是作为元素插入,目的是为了语法统一,多数情况还是使用 
insertAdjacentHTML或者之前那几种方法,语法更简洁 
- 语法一样,只是一个是作为文本插入,一个是作为元素插入,目的是为了语法统一,多数情况还是使用 
 
注意
所有插入方法都会自动从旧位置删除该节点,无需调用
remove()方法删除
<div id="first">First</div>
<div id="second">Second</div>
<script>
  second.after(first)
</script>删除节点
remove()
删除节点
<div>
  <div>==============</div>
  <h1 id="title">Title</h1>
  <div>==============</div>
</div>
<script>
	setTimeout(()=>{
    document.getElementById('title').remove()
  }, 2000)
</script>克隆节点
cloneNode(deep)
克隆节点
elem.cloneNode(true):来创建元素的一个“深”克隆,具有所有特性(attribute)和子元素elem.cloneNode(false):克隆就不包括子元素
<div id="div" class="test">
  123
  <h1>Content H1</h1>
  <h2>Content H2</h2>
  <h3>Content H3</h3>
  <h4>Content H4</h4>
  <h5>Content H5</h5>
  <h6>Content H6</h6>
</div>
<script>
  var oDiv = document.getElementById('div')
  var oCloneDiv = oDiv.cloneNode(false)
  oDiv.after(oCloneDiv)
</script>文档片段
DocumentFragment是一个特殊的 DOM 节点,用作来传递节点列表的包装器可以向其附加其他节点,当将其插入某个位置时,则会插入其内容
<ul id="ul"></ul>
<script>
function getListContent() {
  let fragment = new DocumentFragment()
  for(let i=1; i<=3; i++) {
    let li = document.createElement('li')
    li.append(i)
    fragment.append(li)
  }
  return fragment
}
ul.append(getListContent())
</script>旧版本操作方法
这些旧方法都会返回
node
elem.appendChild(node)
将
node附加为elem的最后一个子元素
elem.insertBefore(node, nextSibling)
在
elem的nextSibling前插入node
elem.replaceChild(node, oldChild)
将
elem的后代中的oldChild替换为node
elem.removeChild(node)
从
parentElem中删除node(假设node为parentElem的后代)