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

如何用JavaScript/jQuery为每个wpb_wrapper内的span组包裹父div

解决每个.wpb_wrapper内span单独包裹到新div的问题

需求

  • 遍历所有带有wpb_wrapper类的div元素
  • 为每个.wpb_wrapper内部的所有span标签,单独包裹一个新的div容器,每个容器的span组相互独立,不能跨容器合并

原始HTML结构

<div class="wpb_wrapper">
  <span class=""></span>
  <span class=""></span>
  <span class=""></span>
  <span class=""></span>
</div>
<div class="wpb_wrapper">
  <span class=""></span>
  <span class=""></span>
  <span class=""></span>
  <span class=""></span>
</div>
<div class="wpb_wrapper">
  <span class=""></span>
  <span class=""></span>
  <span class=""></span>
  <span class=""></span>
</div>

期望HTML结构

<div class="wpb_wrapper">
    <div class="">
      <span class=""></span>
      <span class=""></span>
      <span class=""></span>
      <span class=""></span>
    </div>
</div>
<div class="wpb_wrapper">
    <div class="">
      <span class=""></span>
      <span class=""></span>
      <span class=""></span>
      <span class=""></span>
    </div>
</div>
<div class="wpb_wrapper">
    <div class="">
      <span class=""></span>
      <span class=""></span>
      <span class=""></span>
      <span class=""></span>
    </div>
</div>

错误代码及问题

你尝试的代码会将所有.wpb_wrapper中的span全部移动到第一个容器的新div里,不符合需求:

jQuery('.wpb_wrapper').each(function(){
    jQuery(this).find('span').wrapAll('<div class=""/>');
});

正确解决方案

jQuery 实现

核心是确保在.each()循环中,每次只处理当前.wpb_wrapper内部的span,使用children()可以更精准地定位直接子元素span(如果你的span嵌套在其他元素里,就用find()):

jQuery('.wpb_wrapper').each(function() {
  // 缓存当前容器元素,避免重复DOM查询
  const $currentWrapper = jQuery(this);
  // 包裹当前容器内的所有span
  $currentWrapper.children('span').wrapAll('<div class=""></div>');
});

原生JavaScript 实现

如果不需要依赖jQuery,可以用原生API完成:

// 获取所有目标容器
const wrappers = document.querySelectorAll('.wpb_wrapper');

wrappers.forEach(wrapper => {
  // 获取当前容器内的所有span
  const spans = wrapper.querySelectorAll('span');
  if (spans.length === 0) return; // 没有span则跳过

  // 创建新的div容器
  const container = document.createElement('div');
  // 可选:给新div添加类名
  // container.className = "span-container";

  // 将所有span移动到新div中
  spans.forEach(span => container.appendChild(span));
  
  // 将新div添加回原容器
  wrapper.appendChild(container);
});

可运行测试代码

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<style>
.wpb_wrapper { border: 1px solid #333; margin: 10px 0; padding: 10px; }
.wpb_wrapper > div { border: 1px dotted red; padding: 5px; }
.wpb_wrapper > div > span { border: 1px dashed blue; padding: 3px; margin: 0 2px; }
</style>
<div class="wpb_wrapper">
  <span class="">0</span>
  <span class="">0</span>
  <span class="">0</span>
  <span class="">0</span>
</div>
<div class="wpb_wrapper">
  <span class="">1</span>
  <span class="">1</span>
  <span class="">1</span>
  <span class="">1</span>
</div>
<div class="wpb_wrapper">
  <span class="">2</span>
  <span class="">2</span>
  <span class="">2</span>
  <span class="">2</span>
</div>
<script>
jQuery('.wpb_wrapper').each(function() {
  jQuery(this).children('span').wrapAll('<div class=""></div>');
});
</script>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 02:55:59