总结DOM API的一些常用的方法
1.如何获取DOM节点
- getElementById: 根据元素的 ID 获取元素。
document.getElementById('myID');
- getElementsByClassName: 根据类名获取一组元素,会把有该类名的所有DOM节点都返回,得到的是一个节点数组。
document.getElementsByClassName('myClass');
- getElementsByTagName: 根据标签名获取一组元素,会把所有该标签的DOM节点都返回,得到的是一个节点数组。
document.getElementsByTagName('p');
- querySelector: 根据 CSS 选择器获取单个元素,这里可以通过类名,id,或者标签名去选择节点,只不过只会返回第一个被选择的。
document.querySelector('.myClass'); // 类名 前面加 .
document.querySelector('#my'); // 类名 前面加 #
document.querySelector('p'); // 标签名 前面什么都不加
- querySelectorAll: 和
querySelector差不多,只不过会返回全部选择的节点,得到的是一个节点数组。
document.querySelectorAll('.myClass'); // 类名
document.querySelectorAll('p'); // 标签名
2.创建DOM节点
- createElement: 创建一个新的 HTML 元素。
const newDiv = document.createElement('div');
- createTextNode: 创建一个新的文本节点。
const newText = document.createTextNode('Hello World!');
- createDocumentFragment: 创建一个新的文档碎片。
document.createDocumentFragment()是一个用于创建一个新的DocumentFragment对象的方法。DocumentFragment是一种特殊的DOM节点,常用于批量操作DOM元素,以提高页面性能和减少重排(re-layout)和重绘(repainting)的次数。
DocumentFragment对象主要用于下面两个场景:
批量插入元素:可以先在一个DocumentFragment中创建和配置多个DOM元素,然后再一次性插入到文档中,从而减少页面重排和重绘的次数。
临时存储元素:可以将一组元素暂时存储在DocumentFragment中,以便稍后进行统一处理或插入。
DocumentFragment对象本身也具有一些方法,可以通过这些方法来操作它所包含的子节点:
- appendChild: 将一个节点添加到
DocumentFragment的子节点列表的末尾。 - removeChild: 从
DocumentFragment中移除一个子节点。 - insertBefore: 在指定的子节点之前插入一个新的子节点。
示例
创建并插入多个元素
// 创建 DocumentFragment
const fragment = document.createDocumentFragment();
// 创建一些元素并添加到 DocumentFragment 中
const div1 = document.createElement('div');
div1.textContent = 'Div 1';
fragment.appendChild(div1);
const div2 = document.createElement('div');
div2.textContent = 'Div 2';
fragment.appendChild(div2);
const div3 = document.createElement('div');
div3.textContent = 'Div 3';
fragment.appendChild(div3);
// 将 DocumentFragment 插入到页面中的某个元素
const container = document.getElementById('container');
container.appendChild(fragment);
批量操作元素
// 创建 DocumentFragment
const fragment = document.createDocumentFragment();
// 创建多个元素
const elements = [
{ tag: 'p', content: 'Paragraph 1' },
{ tag: 'span', content: 'Span 1' },
{ tag: 'div', content: 'Div 1' }
];
// 将元素添加到 DocumentFragment 中
elements.forEach(({ tag, content }) => {
const element = document.createElement(tag);
element.textContent = content;
fragment.appendChild(element);
});
// 将 DocumentFragment 插入到页面中的某个元素
const body = document.body;
body.appendChild(fragment);
DocumentFragment的主要优点在于性能的提升,在DocumentFragment中创建和配置多个元素,然后再一次性插入到文档中,可以减少页面的重排和重绘次数,从而提高性能。
3.插入,删除和替换元素
- appendChild: 在父元素的子元素列表末尾添加新的子元素。
parent.appendChild(newDiv);
- insertBefore: 在指定的子元素之前插入新的子元素。
parent.insertBefore(newDiv, existingChild);
- removeChild: 移除父元素中的一个子元素。
parent.removeChild(existingChild);
- replaceChild: 替换父元素中的一个子元素。
parent.replaceChild(newDiv, oldDiv);
4.修改元素的属性和样式
- setAttribute: 设置或更改元素的属性。
element.setAttribute('属性名', '属性值');
- getAttribute: 获取元素的属性值。
const value = element.getAttribute('属性名');
- removeAttribute: 删除元素的属性。
element.removeAttribute('属性名');
- style: 获取或者设置元素的样式,这里获取或者设置的样式只能是在行内式的样式,写在
css里的获取不到。
element.style.color = 'red';
5.修改内容
- innerHTML: 获取或设置元素的 HTML 内容。
element.innerHTML = '<p>New content</p>';
- textContent: 获取或设置元素的纯文本内容。
element.textContent = 'New text content';
6.事件处理
- addEventListener: 添加事件监听器。
element.addEventListener('click', function(event) {
console.log('Clicked!');
});
- removeEventListener: 移除事件监听器。
element.removeEventListener('click', function(event) {
console.log('Clicked!');
});
7.查询和操作表单数据
- value: 获取或设置输入框的值。
inputElement.value = 'New Value';
- checked: 获取或设置复选框的状态。
checkboxElement.checked = true;
8.遍历 DOM 树
遍历 DOM 树的常见属性:
- parentNode: 获取元素的父节点。
- childNodes: 获取元素的子节点列表。
- firstChild: 获取元素的第一个子节点(包含文本节点)。
- firstElementChild:获取元素的第一个子非文本节点。
- lastChild: 获取元素的最后一个子节点(包含文本节点)。
- lastElementChild:获取元素的最后一个子非文本节点。
- nextSibling: 获取元素的下一个兄弟节点。
- previousSibling: 获取元素的上一个兄弟节点。
9.DOM节点比较常用的属性
- className: 元素节点的类名。
- baseURI: 页面URL。
- childElementCount:非文本子节点数量。
- childNodes:子节点列表(包含文本节点)。
- children:分文本子节点列表。
- classList:类名列表。
- className:类名。
- clientHeight:节点的高度(内容高度+padding)。
- clientWidth:节点的宽度(内容宽度+padding)。
- offsetHeight:节点的高度(内容高度+padding+border+水平滚动条)。
- offsetWidth:节点的宽度(内容宽度+padding+border+垂直滚动条)。
- scrollHeight:节点的高度(内容实际高度(因为有可能内容会溢出)+padding)。
- scrollWidth:节点的宽度(内容实际宽度(因为有可能内容会溢出)+padding)。
- clientLeft:节点左边框宽度。
- clientTop:节点上边框宽度。
- offsetLeft:左边框距离定位元素(没有的话就可视窗口)的距离。
- offsetTop:上边框距离定位元素(没有的话就可视窗口)的距离。
- scrollLeft:元素被卷起的宽度。
- scrollTop:元素被卷起的高度。