当前位置:首页 > JavaScript

js实现节点

2026-03-15 00:01:41JavaScript

在 JavaScript 中实现节点操作

创建节点

使用 document.createElement() 方法可以创建一个新的 DOM 节点。该方法接受一个参数,即要创建的元素的标签名。

const newDiv = document.createElement('div');

创建文本节点可以使用 document.createTextNode() 方法:

const textNode = document.createTextNode('这是一个文本节点');

添加节点

使用 appendChild() 方法可以将一个节点添加到另一个节点的子节点列表末尾:

const parentElement = document.getElementById('parent');
parentElement.appendChild(newDiv);

使用 insertBefore() 方法可以在指定子节点前插入新节点:

const referenceElement = document.getElementById('child');
parentElement.insertBefore(newDiv, referenceElement);

删除节点

使用 removeChild() 方法可以从 DOM 中删除一个子节点:

parentElement.removeChild(referenceElement);

现代 JavaScript 也提供了更直接的 remove() 方法:

referenceElement.remove();

替换节点

使用 replaceChild() 方法可以替换一个子节点:

const newElement = document.createElement('span');
parentElement.replaceChild(newElement, referenceElement);

克隆节点

使用 cloneNode() 方法可以克隆一个节点:

const clonedNode = referenceElement.cloneNode(true); // true 表示深克隆,包括所有子节点

节点属性操作

使用 setAttribute()getAttribute() 方法可以设置和获取节点的属性:

js实现节点

newDiv.setAttribute('id', 'newDiv');
const idValue = newDiv.getAttribute('id');

样式操作

可以直接通过 style 属性来操作节点的样式:

newDiv.style.color = 'red';
newDiv.style.backgroundColor = '#f0f0f0';

类名操作

使用 classList 可以方便地操作节点的类名:

newDiv.classList.add('active');
newDiv.classList.remove('inactive');
newDiv.classList.toggle('visible');

事件监听

使用 addEventListener() 方法可以为节点添加事件监听:

newDiv.addEventListener('click', function() {
    console.log('Div 被点击了');
});

遍历节点

可以使用以下属性遍历节点树:

const parent = newDiv.parentNode;
const firstChild = parent.firstChild;
const nextSibling = firstChild.nextSibling;
const children = parent.children; // 只获取元素节点

节点关系判断

使用 contains() 方法可以判断一个节点是否是另一个节点的后代:

js实现节点

const isDescendant = parent.contains(newDiv);

节点位置获取

使用 getBoundingClientRect() 方法可以获取节点在视口中的位置和尺寸:

const rect = newDiv.getBoundingClientRect();
console.log(rect.top, rect.right, rect.bottom, rect.left);

自定义数据属性

HTML5 引入了 data-* 属性,可以通过 dataset 访问:

newDiv.dataset.userId = '12345';
const userId = newDiv.dataset.userId;

性能优化

当需要批量操作 DOM 时,可以考虑使用 DocumentFragment 来提高性能:

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);

现代 API

现代 JavaScript 提供了更简洁的 DOM 操作方式,如 insertAdjacentHTML()

document.getElementById('container').insertAdjacentHTML('beforeend', '<div>新内容</div>');

虚拟 DOM 概念

虽然原生 JavaScript 可以直接操作 DOM,但在复杂应用中,可以考虑使用虚拟 DOM 库(如 React 的虚拟 DOM)来提高性能。虚拟 DOM 通过在内存中维护一个 DOM 的轻量级表示,减少直接操作真实 DOM 的次数。

注意事项

直接操作 DOM 是资源密集型操作,频繁的 DOM 操作会导致页面重绘和回流,影响性能。建议将多个 DOM 操作批量处理,或使用文档片段(DocumentFragment)来优化性能。

标签: 节点js
分享给朋友:

相关文章

js实现拖拽

js实现拖拽

实现拖拽的基本步骤 通过监听鼠标事件(mousedown、mousemove、mouseup)实现拖拽功能。以下是核心代码逻辑: const draggableElement = document.…

js实现全选

js实现全选

实现全选功能的方法 在JavaScript中实现全选功能通常涉及监听全选复选框的点击事件,并根据其状态控制其他复选框的选中状态。以下是几种常见的实现方式: 基础DOM操作实现 通过获取所有目标复选框…

jquery.js

jquery.js

jQuery 是一个快速、简洁的 JavaScript 库,简化了 HTML 文档遍历、事件处理、动画设计和 Ajax 交互等操作。以下是关于 jQuery.js 的核心信息和使用方法: 获取 jQ…

js实现pdf在线预览

js实现pdf在线预览

使用PDF.js实现PDF在线预览 PDF.js是由Mozilla开发的一个开源JavaScript库,可以在网页中直接渲染PDF文件。以下是实现PDF在线预览的步骤: 引入PDF.js库 在HT…

js实现瀑布流

js实现瀑布流

实现瀑布流布局 瀑布流布局是一种常见的网页布局方式,常用于图片展示、商品列表等场景。以下是使用 JavaScript 实现瀑布流布局的几种方法。 纯 JavaScript 实现 通过计算元素的位置和…

js实现祖玛

js实现祖玛

实现祖玛游戏的核心思路 祖玛游戏的核心玩法是发射彩色珠子,形成三个或以上相同颜色的珠子即可消除。以下是使用JavaScript实现的基本框架。 游戏初始化 创建画布并初始化游戏状态: const…