You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将两个div之间的内容包裹在另一个div中

问题:将两个div之间的内容包裹到新div中

我已经查阅过以下内容,但均无法解决需求,推测div元素的特性是问题根源:

  • Wrap plain text in paragraph Jquery
  • Wrap text within element
  • Wrap element between two elements in JavaScript/jQuery?
  • jQuery wrapAll contents including text between two tags
  • Get the text after span element using jquery

需求说明

需要将div_1和div_2之间的所有内容(包括元素和纯文本)包裹到div_3中,原始结构如下:

<div id="div_1"></div>
<strong>stuff here that always begins with same string but does not end that way</strong>
some unknown text here
<div id="div_2"></div>

遇到的问题

尝试手动插入起始标签和闭合标签时,jQuery会自动闭合新创建的div,导致无法包裹中间内容。示例代码:

$(document).ready(function(){
$('#div_1').after('<div id="div_3">');
$('#div_2').before('</div>');
});

执行后生成的错误结构:

<div id="div_1"></div>
<div id="div_3"></div>
    <strong>stuff here that always begins with same string but does not end that way</strong>
    some text here with no consistent string
    <div id="div_2"></div>

正确实现方法

方法1:使用jQuery的nextUntil + wrapAll

利用nextUntil选中div_1之后到div_2之前的所有兄弟节点(包括文本节点),再用wrapAll统一包裹:

$(document).ready(function() {
  $('#div_1').nextUntil('#div_2').wrapAll('<div id="div_3"></div>');
});

方法2:原生JavaScript实现

如果不依赖jQuery,可以直接操作DOM节点完成包裹:

document.addEventListener('DOMContentLoaded', function() {
  const div1 = document.getElementById('div_1');
  const div2 = document.getElementById('div_2');
  const div3 = document.createElement('div');
  div3.id = 'div_3';
  
  let currentNode = div1.nextSibling;
  // 遍历div1之后的所有节点,直到div2为止
  while (currentNode && currentNode !== div2) {
    const nextNode = currentNode.nextSibling; // 提前存储下一个节点,避免移动后丢失引用
    div3.appendChild(currentNode);
    currentNode = nextNode;
  }
  
  // 将div3插入到div1的后面
  div1.insertAdjacentElement('afterend', div3);
});

内容的提问来源于stack exchange,提问作者ACKmiecik

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 19:53:00