DOM 节点树的基本概念

DOM(Document Object Model)节点树是 HTML 或 XML 文档的层次化表示。它将文档解析为一个由节点组成的树状结构,每个节点代表文档中的一个部分,例如元素、属性或文本。DOM 节点树的核心是通过父子关系和兄弟关系组织节点,便于动态操作文档内容。

节点类型与层次关系

DOM 节点树包含多种节点类型,常见的有:

  • 元素节点:代表 HTML 标签(如 <div><p>)。
  • 文本节点:包含标签内的文本内容。
  • 属性节点:存储元素的属性(如 classid)。

以下是一个简单的 HTML 文档及其对应的 DOM 节点树结构:

<!DOCTYPE html>
<html>
<head>
    <title>DOM 示例</title>
</head>
<body>
    <div id="container">
        <p class="text">Hello, World!</p>
    </div>
</body>
</html>

对应的 DOM 节点树层次:

  • document 根节点
    • <html> 元素节点
      • <head> 元素节点
        • <title> 元素节点
          • "DOM 示例" 文本节点
      • <body> 元素节点
        • <div id="container"> 元素节点
          • <p class="text"> 元素节点
            • "Hello, World!" 文本节点

遍历 DOM 节点树

通过 JavaScript 可以遍历 DOM 节点树,访问父子节点或兄弟节点。以下是常用方法和属性:

// 获取元素节点
const container = document.getElementById('container');
const pElement = document.querySelector('.text');

// 访问父节点
console.log(pElement.parentNode); // 输出 <div id="container">

// 访问子节点
console.log(container.childNodes); // 输出 NodeList [ <p class="text"> ]

// 访问兄弟节点
console.log(pElement.nextSibling); // 输出 null(无下一个兄弟节点)

动态操作 DOM 节点

DOM 节点树支持动态增删改操作。以下是常见操作示例:

创建并插入节点
// 创建新元素节点
const newDiv = document.createElement('div');
newDiv.textContent = '动态添加的内容';

// 插入到容器末尾
container.appendChild(newDiv);

删除节点
// 删除指定子节点
container.removeChild(pElement);

修改节点属性
// 修改元素属性
newDiv.setAttribute('class', 'dynamic');
console.log(newDiv.className); // 输出 'dynamic'

事件监听与节点交互

通过事件监听可以实现用户与 DOM 节点的交互:

// 为动态添加的 div 绑定点击事件
newDiv.addEventListener('click', function() {
    alert('节点被点击!');
});

性能优化建议

频繁操作 DOM 可能引发性能问题。以下是优化建议:

  • 使用 documentFragment 批量操作节点:
    const fragment = document.createDocumentFragment();
    for (let i = 0; i < 10; i++) {
        const item = document.createElement('li');
        item.textContent = `Item ${i}`;
        fragment.appendChild(item);
    }
    document.getElementById('list').appendChild(fragment);
    

  • 避免在循环中直接修改 DOM,优先操作内存中的节点树。
Logo

为武汉地区的开发者提供学习、交流和合作的平台。社区聚集了众多技术爱好者和专业人士,涵盖了多个领域,包括人工智能、大数据、云计算、区块链等。社区定期举办技术分享、培训和活动,为开发者提供更多的学习和交流机会。

更多推荐