使用JQuery替换开始和结束标签

时间:2019-06-26 13:14:05

标签: javascript jquery

我需要解析我的网站并将新版本保存到变量中。

例如,我有这样的代码:

<body>
  <div data-newname="test"></div>
  <div data-newname="test2"></div>
</body>

因此新代码应为:

<body>
  {{Start:test}}{{End::test}}
  {{Start:test2}}{{End::test2}}
</body>

我想使用replacewiths方法,但这对我没有帮助:(也许是正则表达式?

2 个答案:

答案 0 :(得分:1)

您要搜索replaceWith()

更新:逆序替换最里面的第一个

$($('[data-newname]').get().reverse()).replaceWith(function() {
  let data = $(this).data('newname')
  return `{{Start:${data}}}${$(this).html()}{{End::${data}}}`
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

<div data-newname="test1">
  Test1
  <div data-newname="test2">Test2</div>
</div>
<div data-newname="test3">Test3</div>

答案 1 :(得分:0)

您可以使用jQuery replaceWith()重新包装元素。

由于覆盖外部元素的HTML将删除集合中的嵌套元素,因此我将其包装在while中,以确保嵌套元素也得到更新。

while ($("[data-newname]").length) {
  $("[data-newname]").replaceWith(function() {
    let data = $(this).data("newname");
    return `{{Start:${data}}}${$(this).html()}{{End::${data}}}`
  });
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div data-newname="test">
  <div data-newname="nested">Nested</div>
</div>
<div data-newname="test2">Test2</div>