JavaScript DOM操作详解

DOM全称Document Object Model 是JavaScript操作网页内容的接口,它讲HTML文档表示为节点树,允许我们通过JavaScript动态的访问和更新HTML文档的内容、结构和样式。

一、获取 DOM 元素

        在对DOM进行操作之前,我们需要从节点树中去获取这个节点。

        1. 基本选择方法

//通过ID获取DOM元素
const elementById = document.getElementById('idName')

//通过类名获取元素集合
const elementsByClassName = document.getElementByClassName('className')

//通过标签名获取元素集合
const elementsByTag = document.getElementsByTagName('div')

//通过name属性获取元素集合
const elementsByName = document.getElementsByName('name')

        2. 现代选择方法

// 通过CSS选择器获取第一个匹配元素
const element = document.querySelector('.class #id');

// 通过CSS选择器获取所有匹配元素(NodeList)
const elements = document.querySelectorAll('div.className');

二、DOM 遍历(如何在节点树中移动和访问不同的节点)

// 父节点
const parent = element.parentNode;

// 子节点
const children = element.childNodes; // 包含文本节点
const childrenElements = element.children; // 仅元素节点

// 第一个/最后一个子节点
const firstChild = element.firstChild;
const lastChild = element.lastChild;
const firstElementChild = element.firstElementChild;
const lastElementChild = element.lastElementChild;

// 兄弟节点
const nextSibling = element.nextSibling;
const previousSibling = element.previousSibling;
const nextElementSibling = element.nextElementSibling;
const previousElementSibling = element.previousElementSibling;

三、操作元素内容

// 获取/设置HTML内容
element.innerHTML = '<strong>新内容</strong>';

// 获取/设置文本内容(不解析HTML)
element.textContent = '纯文本内容';

// 获取/设置表单元素的值
inputElement.value = '新值';

四、操作元素属性

// 获取/设置标准属性
const href = linkElement.href;
imgElement.src = 'new-image.jpg';

// 通用属性操作方法
element.setAttribute('data-custom', 'value');
const value = element.getAttribute('data-custom');
element.removeAttribute('data-custom');
element.hasAttribute('data-custom'); // 返回布尔值

// class操作
element.classList.add('new-class');
element.classList.remove('old-class');
element.classList.toggle('active');
element.classList.contains('some-class'); // 返回布尔值

// 直接操作className
element.className = 'class1 class2';

五、创建和修改DOM节点

// 创建新元素
const newDiv = document.createElement('div');

// 添加子节点
parentElement.appendChild(newDiv);
parentElement.insertBefore(newDiv, referenceElement);

// 替换节点
parentElement.replaceChild(newDiv, oldChild);

// 移除节点
parentElement.removeChild(childToRemove);
// 或现代方法
childToRemove.remove();

// 克隆节点
const clonedNode = originalNode.cloneNode(true); // true表示深克隆

六、样式操作

// 直接操作style属性
element.style.color = 'blue';
element.style.backgroundColor = '#f0f0f0';

// 批量设置样式
element.style.cssText = 'color: blue; background: yellow;';

// 获取计算样式(只读)
const computedStyle = window.getComputedStyle(element);
const color = computedStyle.color;

七、事件处理

// 添加事件监听器
element.addEventListener('click', function(event) {
  console.log('元素被点击了', event.target);
});

// 移除事件监听器
const handler = function() { console.log('只触发一次'); };
element.addEventListener('click', handler);
element.removeEventListener('click', handler);

// 常见事件
// click, dblclick, mouseover, mouseout, mousedown, mouseup
// keydown, keyup, keypress
// focus, blur, change, submit
// load, resize, scroll

八、DOM 操作最佳实践

        1.缓存DOM查询结果:避免重复查询相同的DOM元素

// 不好
for(let i = 0; i < 100; i++) {
  document.querySelector('.item').style.color = 'red';
}

// 好
const item = document.querySelector('.item');
for(let i = 0; i < 100; i++) {
  item.style.color = 'red';
}

        2.批量DOM操作:使用文档片段(document fragment)减少重绘

const fragment = document.createDocumentFragment();
for(let i = 0; i < 100; i++) {
  const div = document.createElement('div');
  fragment.appendChild(div);
}
document.body.appendChild(fragment);

        3.事件委托:利用事件冒泡处理动态内容

document.getElementById('parent').addEventListener('click', function(e) {
  if(e.target.classList.contains('child')) {
    // 处理子元素点击
  }
});

理解 DOM 操作对于构建交互式网页至关重要。基本选择方法(如 getElementById)适合简单场景且性能更好,而现代方法(如 querySelector)则提供了更灵活的 CSS 选择器支持。对于频繁操作,建议缓存 DOM 元素以提高性能。

在实际开发中,应根据需求选择合适的方法:

  • 简单操作使用原生 DOM API

  • 复杂交互考虑使用 jQuery 等库

  • 大型项目推荐使用 React/Vue 等框架

记住:减少不必要的 DOM 操作可以显著提升页面性能!

希望这个总结能帮助你更好地掌握 JavaScript DOM 操作的精髓!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值