javascript - 大量更换元件

标签 javascript jquery

我正在尝试将某个元素中的所有子元素替换为 DIV。

我有以下结构:

<div id="wrapper">
    <span>
        <span>
            <span>
                <span></span>
                <span></span>
            </span>
        </span>
    </span>
</div>

我已经尝试过replaceElements($('#wrapper')) :

function replaceElements($element){
    var children = $element.find("*");
    var current;
    for(var i=0; i<children.length; i++){
        current = $(children[i]);
        current.replaceWith("<div>" + current.html() + "</div>");
    }
}

但是这不起作用,因为当它尝试更改第 N+1 个元素时,所有准备就绪的元素都不存在,因为它在执行第 N 个元素时被替换了。 N+1 是 N 的后代,因此在更改 .html() 时也会被更改。 N 个。保留元素属性在这里不是问题。

请问如何将所有子 SPAN 更改为 DIV?

最佳答案

您不应该在替换的元素中使用 html 内容,而是需要向其中添加 dom 元素

function replaceElements($element) {

  $element.find("*").replaceWith(function() {
    return $('<div></div>', {
      html: this.childNodes
    });
  })
}

replaceElements($('#wrapper'))
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<div id="wrapper">
  <span>1
    <span>2
      <span>3
        <span>4</span>
        <span>5</span>
      </span>
    </span>
  </span>
</div>

注意:不会复制元素的任何属性

关于javascript - 大量更换元件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31605858/

相关文章:

javascript - React Material UI GridList 单元格不能正确换行

用于匹配多个实例的 JavaScript 正则表达式

javascript - 将 javascript 变量回显到 smarty 中

php - 如何使用 Jquery 在 DatePicker 中设置昨天日期

javascript - 使用 Cropper js 裁剪后图像质量降低

javascript - Vue.js 怎么能像 Angular.js 那样配置 templateUrl 呢?

javascript - 从 HTML 页面插入 XML

javascript - 滚动时如何阻止图像向下移动?

Javascript矩阵数组问题

javascript - 监听来自显示 : none to display:block 的任何 div