insertAdjacentHTML是 原生 JavaScript DOM 方法,用于在指定元素的不同位置插入 HTML 内容,不会破坏原有元素结构.这是一个非常实用且高效的 DOM 操作方法。
一、核心概念
insertAdjacentHTML()
方法用于将指定的文本解析为 HTML 或 XML,并将生成的节点插入到 DOM 树中的指定位置。
它结合了两个操作的优点:
像
innerHTML
一样:可以直接写入 HTML 字符串,浏览器会帮你解析。像
appendChild
一样精确:可以非常精确地控制插入的位置,而不会像innerHTML
那样容易覆盖已有的内容。
二、语法
element.insertAdjacentHTML(position, text);
它接受两个参数:
position
:一个字符串,表示相对于element
的位置。必须是以下四个值之一:'beforebegin'
:在element
本身之前插入(作为前一个兄弟节点)。'afterbegin'
:在element
的第一个子节点之前插入(作为它的第一个子元素)。'beforeend'
:在element
的最后一个子节点之后插入(作为它的最后一个子元素)。'afterend'
:在element
本身之后插入(作为下一个兄弟节点)。text
:一个字符串,会被解析为 HTML 或 XML 并插入到 DOM 中。
示例代码
// 获取目标元素 const container = document.getElementById('container'); // 在元素末尾插入 HTML container.insertAdjacentHTML('beforeEnd', '新段落');
三、位置详解
假设我们有如下 HTML 结构:
<!-- beforebegin --> <div id="myDiv"> <!-- afterbegin --> <p>这是一个段落</p> <!-- beforeend --> </div> <!-- afterend -->
现在,我们针对 #myDiv
这个元素调用 insertAdjacentHTML
:
position: 'beforebegin'
myDiv.insertAdjacentHTML('beforebegin', '我在Div外面,前面');
结果:<span>
会作为 #myDiv
的上一个兄弟元素被插入。
position: 'afterbegin'
myDiv.insertAdjacentHTML('afterbegin', '我是Div的第一个孩子');
结果:<span>
会作为 #myDiv
的第一个子元素被插入,在 <p>
标签之前。
position: 'beforeend'
myDiv.insertAdjacentHTML('beforeend', '我是Div的最后一个孩子');
结果:<span>
会作为 #myDiv
的最后一个子元素被插入,在 <p>
标签之后。
position: 'afterend'
myDiv.insertAdjacentHTML('afterend', '我在Div外面,后面');
结果:<span>
会作为 #myDiv
的下一个兄弟元素被插入。