Appearance
DOM常见操作详解
一、DOM节点操作
1.1 获取节点
javascript
// 1. 按照ID获取
const element = document.getElementById('myId');
// 2. 按照class获取
const elements = document.getElementsByClassName('myClass');
// 3. 按照标签名获取
const divs = document.getElementsByTagName('div');
// 4. CSS选择器
const element = document.querySelector('.class #id');
const elements = document.querySelectorAll('.class');
// 5. 获取父子节点
const parent = element.parentNode;
const children = element.children;
const firstChild = element.firstElementChild;
const lastChild = element.lastElementChild;
const next = element.nextElementSibling;
const prev = element.previousElementSibling;
1.2 创建节点
javascript
// 1. 创建元素节点
const div = document.createElement('div');
// 2. 创建文本节点
const text = document.createTextNode('Hello World');
// 3. 创建注释节点
const comment = document.createComment('这是注释');
// 4. 创建文档片段
const fragment = document.createDocumentFragment();
// 5. 克隆节点
const clone = element.cloneNode(true); // true表示深克隆
1.3 插入节点
javascript
// 1. 在末尾插入
parent.appendChild(child);
// 2. 在指定元素前插入
parent.insertBefore(newNode, referenceNode);
// 3. 替换节点
parent.replaceChild(newChild, oldChild);
// 4. 插入HTML
element.innerHTML = '<div>新内容</div>';
element.insertAdjacentHTML('beforeend', '<div>新内容</div>');
// 5. 批量插入
const fragment = document.createDocumentFragment();
for (let i = 0; i < 100; i++) {
const li = document.createElement('li');
li.textContent = `Item ${i}`;
fragment.appendChild(li);
}
document.getElementById('list').appendChild(fragment);
1.4 删除节点
javascript
// 1. 删除子节点
parent.removeChild(child);
// 2. 删除自身
element.remove();
// 3. 清空子节点
while (element.firstChild) {
element.removeChild(element.firstChild);
}
// 或者
element.innerHTML = '';
二、DOM属性操作
2.1 HTML属性操作
javascript
// 1. 获取属性
element.getAttribute('class');
element.id;
element.className;
element.href;
// 2. 设置属性
element.setAttribute('class', 'new-class');
element.id = 'newId';
element.className = 'new-class';
// 3. 检查属性
element.hasAttribute('class');
// 4. 删除属性
element.removeAttribute('class');
// 5. data-*属性
element.dataset.name = 'value';
console.log(element.dataset.name);
2.2 样式操作
javascript
// 1. 内联样式
element.style.color = 'red';
element.style.fontSize = '16px';
element.style.backgroundColor = '#fff';
// 2. 类名操作
element.classList.add('active');
element.classList.remove('active');
element.classList.toggle('active');
element.classList.contains('active');
// 3. 获取计算样式
const style = window.getComputedStyle(element);
console.log(style.color);
三、DOM内容操作
3.1 文本操作
javascript
// 1. 文本内容
element.textContent = '新文本';
const text = element.textContent;
// 2. 内部HTML
element.innerHTML = '<span>新HTML</span>';
const html = element.innerHTML;
// 3. 外部HTML
element.outerHTML = '<div>替换整个元素</div>';
const outerHtml = element.outerHTML;
3.2 表单操作
javascript
// 1. 输入框值
input.value = '新值';
const value = input.value;
// 2. 复选框
checkbox.checked = true;
const isChecked = checkbox.checked;
// 3. 选择框
select.selectedIndex = 1;
const selectedValue = select.value;
const selectedOption = select.options[select.selectedIndex];
四、常见应用场景
4.1 动态创建表格
javascript
function createTable(data) {
const table = document.createElement('table');
const tbody = document.createElement('tbody');
data.forEach(row => {
const tr = document.createElement('tr');
Object.values(row).forEach(text => {
const td = document.createElement('td');
td.textContent = text;
tr.appendChild(td);
});
tbody.appendChild(tr);
});
table.appendChild(tbody);
return table;
}
// 使用示例
const data = [
{ name: '张三', age: 20 },
{ name: '李四', age: 21 }
];
document.body.appendChild(createTable(data));
4.2 动态列表渲染
javascript
function renderList(items, listId) {
const list = document.getElementById(listId);
const fragment = document.createDocumentFragment();
items.forEach(item => {
const li = document.createElement('li');
li.textContent = item;
fragment.appendChild(li);
});
list.appendChild(fragment);
}
// 使用示例
const items = ['苹果', '香蕉', '橙子'];
renderList(items, 'fruit-list');
总结
DOM操作主要包括:
- 节点操作(增删改查)
- 属性操作
- 内容操作
- 样式操作
注意事项:
- 优先使用新API(如classList)
- 批量操作使用文档片段
- 适当缓存DOM查询结果
- 避免频繁操作DOM