天津电力建设公司网站创新创意产品设计作品
2026/3/29 8:51:49 网站建设 项目流程
天津电力建设公司网站,创新创意产品设计作品,常见的营销方式有哪几种,论坛空间申请JavaScript 操作 DOM 元素#xff1a;添加、删除、替换、插入的完整方法指南一、开篇#xff1a;DOM 元素操作 —— 前端页面交互的核心基石在前端开发中#xff0c;DOM#xff08;文档对象模型#xff09;是连接 JavaScript 与页面结构的桥梁#xff0c;而元素的添加、删…JavaScript 操作 DOM 元素添加、删除、替换、插入的完整方法指南一、开篇DOM 元素操作 —— 前端页面交互的核心基石在前端开发中DOM文档对象模型是连接 JavaScript 与页面结构的桥梁而元素的添加、删除、替换、插入是 DOM 操作中最基础也最常用的场景。无论是构建动态列表、实现组件渲染还是处理用户交互后的页面更新都离不开这些核心方法。很多初学者在面对appendChild、insertBefore、removeChild等方法时容易混淆其用法和适用场景甚至出现 “元素插入失败”“删除报错” 等问题。本文将系统梳理 JavaScript 中 DOM 元素操作的四大类方法添加、删除、替换、插入结合实战示例、使用差异和注意事项帮你彻底掌握 DOM 元素操作的精髓。二、第一类添加元素 —— 向 DOM 中新增节点添加元素的核心是将创建好的 DOM 节点或已有节点挂载到指定父元素下常用方法有 4 种各自有明确的适用场景1. appendChild ()追加子元素到父元素末尾核心功能将一个节点添加到指定父节点的子节点列表的末尾是最基础的添加元素方法。语法parentNode.appendChild(childNode)特点若childNode是页面中已存在的节点会将其从原有位置移动到新的父元素末尾而非复制返回值为被添加的childNode节点。实战示例javascript运行// 1. 创建新元素 const newDiv document.createElement(div); newDiv.className new-item; newDiv.innerText 新增的末尾元素; // 2. 获取父元素 const parent document.getElementById(parent-container); // 3. 追加到父元素末尾 const addedNode parent.appendChild(newDiv); console.log(addedNode newDiv); // true返回被添加的节点 // 4. 移动已有元素而非复制 const existingNode document.getElementById(existing-item); parent.appendChild(existingNode); // existingNode会从原有位置移动到parent末尾2. append ()灵活追加多个节点 / 字符串ES6核心功能向父节点末尾追加一个或多个节点或直接追加字符串会自动转为文本节点功能比appendChild更强大。语法parentNode.append(node1, node2, ..., string1, string2, ...)与 appendChild 的核心区别特性appendChild()append()支持参数数量仅支持单个节点支持多个节点 / 字符串支持字符串直接追加不支持需手动创建文本节点支持自动转为文本节点返回值返回被添加的节点无返回值undefined实战示例javascript运行const parent document.getElementById(parent-container); // 1. 追加多个节点 const div1 document.createElement(div); div1.innerText 节点1; const div2 document.createElement(div); div2.innerText 节点2; parent.append(div1, div2); // 2. 追加节点字符串 const div3 document.createElement(div); div3.innerText 节点3; parent.append(div3, 直接追加的文本内容); // 字符串自动转为文本节点 // 3. 对比appendChild仅能单个节点 // parent.appendChild(div1, div2); // 报错参数过多3. prepend ()向父元素开头追加节点 / 字符串ES6核心功能与append()功能类似但会将内容添加到父节点的子节点列表开头而非末尾。语法parentNode.prepend(node1, node2, ..., string1, string2, ...)特点支持多参数、支持字符串直接追加、无返回值是 “向开头添加元素” 的便捷方法。实战示例javascript运行const parent document.getElementById(parent-container); const newItem document.createElement(p); newItem.innerText 添加到开头的元素; // 向父元素开头追加 parent.prepend(newItem, 开头的文本内容); // 此时newItem是parent的第一个子元素4. appendChild vs append vs prepend 适用场景总结若需兼容低版本浏览器如 IE11优先使用appendChild()若需一次性添加多个元素 / 字符串且无需兼容低版本浏览器优先使用append()末尾/prepend()开头若需要获取被添加的节点引用使用appendChild()append/prepend无返回值。三、第二类删除元素 —— 从 DOM 中移除节点删除元素的核心是将目标节点从其父元素中移除常用方法有 3 种涵盖直接删除、间接删除等场景1. removeChild ()父元素删除子元素传统方法核心功能通过父元素找到并删除指定的子元素是兼容所有浏览器的传统删除方法。语法parentNode.removeChild(childNode)特点必须通过父元素调用且需传入要删除的子元素节点返回值为被删除的节点可用于后续复用该节点若childNode不是parentNode的子元素会抛出NotFoundError。实战示例javascript运行// 1. 获取父元素和要删除的子元素 const parent document.getElementById(parent-container); const childToRemove document.getElementById(child-to-delete); // 2. 删除子元素推荐先判断是否为子元素避免报错 if (parent.contains(childToRemove)) { const removedNode parent.removeChild(childToRemove); console.log(removedNode childToRemove); // true返回被删除的节点 // 可复用被删除的节点重新添加到DOM中 // parent.appendChild(removedNode); }2. remove ()元素自行删除ES6核心功能目标元素直接调用该方法自行从 DOM 中移除无需通过父元素操作更简洁高效。语法childNode.remove()特点无需获取父元素直接操作目标节点无返回值undefined低版本浏览器如 IE11不支持需转译或降级使用removeChild()。实战示例javascript运行// 获取要删除的元素 const childToRemove document.getElementById(child-to-delete); // 直接删除无需父元素 childToRemove.remove(); // 对比removeChild需父元素 // const parent childToRemove.parentElement; // parent.removeChild(childToRemove);3. 间接删除替换法 / 清空法场景 1清空父元素下所有子元素无需逐个删除javascript运行const parent document.getElementById(parent-container); // 方法1innerHTML 清空简单粗暴 parent.innerHTML ; // 方法2循环删除子元素更安全避免innerHTML可能的XSS风险 while (parent.firstChild) { parent.removeChild(parent.firstChild); }场景 2通过替换元素间接删除后续详解replaceChildjavascript运行// 用空节点替换目标节点间接实现删除 const parent document.getElementById(parent-container); const childToRemove document.getElementById(child-to-delete); const emptyNode document.createTextNode(); parent.replaceChild(emptyNode, childToRemove);4. 删除方法适用场景总结若需兼容低版本浏览器或需要复用被删除的节点优先使用removeChild()若无需兼容低版本浏览器且操作简单优先使用remove()代码更简洁若需清空父元素所有子元素优先使用innerHTML 简单或循环removeChild安全。四、第三类替换元素 —— 替换 DOM 中的已有节点替换元素是将原有节点替换为新节点核心方法有 2 种分别对应传统用法和现代用法1. replaceChild ()父元素替换子元素传统方法核心功能用新节点替换父元素中的指定子节点是兼容所有浏览器的替换方法。语法parentNode.replaceChild(newNode, oldNode)特点必须通过父元素调用传入 “新节点” 和 “要被替换的旧节点”返回值为被替换的旧节点可复用若oldNode不是parentNode的子元素会抛出NotFoundError。实战示例javascript运行// 1. 创建新节点 const newNode document.createElement(div); newNode.className new-replace-item; newNode.innerText 替换后的新元素; // 2. 获取父元素和要被替换的旧节点 const parent document.getElementById(parent-container); const oldNode document.getElementById(old-item); // 3. 替换节点先判断避免报错 if (parent.contains(oldNode)) { const replacedNode parent.replaceChild(newNode, oldNode); console.log(replacedNode oldNode); // true返回被替换的旧节点 }2. replaceWith ()元素自行被替换ES6核心功能目标节点直接调用该方法被新节点 / 字符串替换无需通过父元素操作更简洁。语法oldNode.replaceWith(newNode1, newNode2, ..., string1, ...)特点无需获取父元素直接操作目标节点支持多个新节点 / 字符串会依次替换旧节点添加到旧节点的原有位置无返回值undefined低版本浏览器如 IE11不支持。实战示例javascript运行// 1. 获取要被替换的旧节点 const oldNode document.getElementById(old-item); // 2. 用单个新节点替换 const newNode1 document.createElement(div); newNode1.innerText 单个新节点替换; oldNode.replaceWith(newNode1); // 3. 用多个节点/字符串替换 const newNode2 document.createElement(div); newNode2.innerText 新节点1; oldNode.replaceWith(newNode2, 替换的文本, document.createElement(span)); // 此时旧节点被移除原有位置变为 newNode2 文本 span 节点3. 替换方法适用场景总结兼容低版本浏览器使用replaceChild()现代项目无需兼容 IE使用replaceWith()代码更简洁支持多参数若需要复用被替换的旧节点使用replaceChild()返回旧节点。五、第四类插入元素 —— 在指定位置插入节点插入元素是指在 “非开头 / 非末尾” 的自定义位置插入节点如在某个元素之前 / 之后插入核心方法有 2 种1. insertBefore ()在指定元素之前插入节点传统方法核心功能将新节点插入到父元素中 “参考节点” 的前面是精准插入元素的基础方法。语法parentNode.insertBefore(newNode, referenceNode)关键说明referenceNode参考节点新节点将插入到该节点之前若referenceNode为null则效果等同于appendChild()插入到末尾返回值为被插入的newNode节点兼容所有浏览器。实战示例javascript运行// 1. 创建新节点 const newNode document.createElement(div); newNode.innerText 插入到参考节点之前的元素; // 2. 获取父元素和参考节点 const parent document.getElementById(parent-container); const referenceNode document.getElementById(reference-item); // 3. 插入到参考节点之前 if (parent.contains(referenceNode)) { const insertedNode parent.insertBefore(newNode, referenceNode); console.log(insertedNode newNode); // true } // 4. 若referenceNode为null插入到末尾 // parent.insertBefore(newNode, null); // 等同于parent.appendChild(newNode)2. insertAdjacentElement ()灵活插入到元素周围现代方法核心功能将新节点插入到目标元素的前后左右四个精准位置支持更灵活的插入场景无需依赖父元素。语法targetElement.insertAdjacentElement(position, newNode)position 参数4 个可选值position 值插入位置beforebegin目标元素外部的前面兄弟节点之前afterbegin目标元素内部的开头子节点第一个beforeend目标元素内部的末尾子节点最后一个afterend目标元素外部的后面兄弟节点之后特点无需获取父元素直接通过目标元素操作插入位置更灵活支持外部插入返回值为被插入的newNode节点插入失败返回null兼容 IE9现代项目优先使用。实战示例html预览!-- 初始结构 -- div idparent div idtarget目标元素/div /divjavascript运行const target document.getElementById(target); const newNode document.createElement(div); newNode.innerText 插入的元素; // 1. beforebegin目标元素外部前面 target.insertAdjacentElement(beforebegin, newNode); // 结构变为div插入的元素/div div idtarget目标元素/div // 2. afterbegin目标元素内部开头 target.insertAdjacentElement(afterbegin, newNode); // 结构变为div idtargetdiv插入的元素/div目标元素/div // 3. beforeend目标元素内部末尾 target.insertAdjacentElement(beforeend, newNode); // 结构变为div idtarget目标元素div插入的元素/div/div // 4. afterend目标元素外部后面 target.insertAdjacentElement(afterend, newNode); // 结构变为div idtarget目标元素/div div插入的元素/div补充insertAdjacentHTML/Text ()—— 直接插入 HTML / 文本insertAdjacentHTML(position, htmlString)直接插入 HTML 字符串无需创建节点insertAdjacentText(position, textString)直接插入纯文本避免 XSS 风险javascript运行const target document.getElementById(target); // 插入HTML target.insertAdjacentHTML(afterend, div classhtml-item插入的HTML/div); // 插入文本 target.insertAdjacentText(beforebegin, 插入的纯文本);3. 插入方法适用场景总结需兼容低版本浏览器且在参考节点前插入使用insertBefore()现代项目需要灵活插入尤其是外部插入使用insertAdjacentElement()无需创建节点直接插入 HTML / 文本使用insertAdjacentHTML()/insertAdjacentText()仅需插入到开头 / 末尾优先使用prepend()/append()更简洁。六、实战总结DOM 元素操作方法速查表操作类型方法名核心特点兼容性适用场景添加appendChild()单个节点、末尾插入、返回节点所有浏览器兼容低版本、需复用被添加节点添加append()多节点 / 字符串、末尾插入、无返回值IE11现代项目、批量添加到末尾添加prepend()多节点 / 字符串、开头插入、无返回值IE11现代项目、批量添加到开头删除removeChild()父元素删除、返回被删节点所有浏览器兼容低版本、需复用被删节点删除remove()自身删除、无需父元素、无返回值IE11现代项目、简单删除操作删除innerHTML 清空父元素所有子元素所有浏览器快速清空父元素注意 XSS 风险替换replaceChild()父元素替换、返回旧节点所有浏览器兼容低版本、需复用旧节点替换replaceWith()自身被替换、多节点 / 字符串、无返回值IE11现代项目、灵活替换插入insertBefore()参考节点前插入、返回新节点所有浏览器兼容低版本、精准插入到参考节点前插入insertAdjacentElement()4 个位置灵活插入、无需父元素、返回新节点IE9现代项目、外部插入 / 精准位置插入插入insertAdjacentHTML()直接插入 HTML 字符串、4 个位置IE9无需创建节点、快速插入 HTML 结构七、注意事项避免 DOM 操作的常见坑频繁 DOM 操作导致性能损耗多次添加 / 删除元素时先将节点脱离 DOM如使用文档片段DocumentFragment批量操作后再挂载到 DOM 中javascript运行// 优化用DocumentFragment批量添加节点 const fragment document.createDocumentFragment(); for (let i 0; i 10; i) { const div document.createElement(div); div.innerText 批量元素${i}; fragment.appendChild(div); } document.getElementById(parent).appendChild(fragment); // 仅一次DOM操作操作不存在的节点报错操作前先判断节点是否存在如if (node)、parent.contains(child)const声明的节点可操作const声明的是节点引用而非节点本身可正常执行remove()、appendChild()等操作innerHTML 的 XSS 风险插入用户输入的内容时优先使用textContent或insertAdjacentText()避免 XSS 攻击。八、结尾掌握 DOM 操作提升前端交互能力DOM 元素的添加、删除、替换、插入是前端开发的基础技能也是实现页面动态交互的核心。本文梳理的各类方法既有兼容旧浏览器的传统用法也有简洁高效的现代 API掌握它们的差异和适用场景能让你在开发中更灵活地操作 DOM写出更高效、更健壮的代码。值得注意的是在现代前端框架React、Vue中我们很少直接操作 DOM但理解 DOM 操作的本质能帮助我们更好地理解框架的底层原理排查框架封装后的 DOM 相关问题。无论是原生开发还是框架开发DOM 操作的基础知识都不可或缺。最后用一句话总结DOM 元素操作的核心是 “定位节点 选择合适的方法”选对方法既能提升开发效率又能优化页面性能。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询