document.createElement()
创建新元素,设置属性后,用appendChild()
或insertBefore()
将其插入到文档指定位置,parent.appendChild(newNode)
。在HTML中动态增加节点(DOM操作)是前端开发的核心技能之一,能实现内容的实时更新与交互,以下是5种主流方法及详细示例:
appendChild() – 末尾插入子节点
<div id="parent"> <p>现有子节点</p> </div> <script> const parent = document.getElementById("parent"); const newNode = document.createElement("p"); newNode.textContent = "新增的子节点"; parent.appendChild(newNode); // 插入到父元素末尾 </script>
结果:<div id="parent"><p>现有子节点</p><p>新增的子节点</p></div>
insertBefore() – 指定位置插入
const refNode = parent.children[0]; // 获取第一个子节点 parent.insertBefore(newNode, refNode); // 插入到refNode之前
结果:<div id="parent"><p>新增的子节点</p><p>现有子节点</p></div>
insertAdjacentHTML() – 灵活插入HTML字符串
parent.insertAdjacentHTML( "beforeend", // 插入位置 '<p class="highlight">HTML字符串插入</p>' );
位置参数:
beforebegin
:元素前插入afterbegin
:元素内开头beforeend
:元素内末尾(最常用)afterend
:元素后插入
append()/prepend() – 批量插入(现代API)
// 插入多个节点 parent.append(newNode, document.createElement("span")); // 开头插入 parent.prepend(document.createTextNode("开头文本"));
cloneNode() – 复制现有节点
const original = document.querySelector(".item"); const clonedNode = original.cloneNode(true); // true表示深度克隆 clonedNode.id = "newId"; // 修改ID避免重复 parent.appendChild(clonedNode);
⚠️ 关键注意事项
-
性能优化:
- 避免在循环中频繁操作DOM(使用文档片段
DocumentFragment
)const fragment = document.createDocumentFragment(); for(let i=0; i<100; i++) { const item = document.createElement("div"); fragment.appendChild(item); } parent.appendChild(fragment);
- 避免在循环中频繁操作DOM(使用文档片段
-
XSS防护:
- 使用
textContent
替代innerHTML
防注入攻击 - 必须使用
innerHTML
时,用DOMPurify.sanitize()
过滤
- 使用
-
现代API选择:
| 方法 | 适用场景 | 是否支持多参数 |
|———————|———————————|————–|
|appendChild()
| 兼容性要求高的项目 | ❌ |
|append()
| 批量插入节点(IE不支持) | ✅ |
|insertAdjacentHTML
| 需要插入HTML字符串时 | – |
最佳实践建议
- 语义化标签:创建节点时使用正确的HTML5标签(如
<article>
、<nav>
) - ARIA属性添加无障碍属性
newNode.setAttribute("aria-live", "polite");
- 框架优化:在Vue/React中优先使用数据驱动(v-for/map)
权威参考:
- MDN DOM操作文档
- W3C DOM规范
- Google Web安全指南
遵循Web标准,通过MDN及W3C官方文档验证,适用于生产环境。
原创文章,发布者:酷盾叔,转转请注明出处:https://www.kd.cn/ask/26660.html