javascript - 如何用另一个标签替换字符串 HTML 标签?

标签 javascript jquery html

如何将字符串 HTML 非白名单标签替换为 P 标签?

示例白名单是 p br 标记

之前的字符串

<p>hello</p>
<div class="test">hello world <br>
     <div>First LI</div>
     <div>Second LI <a href="">link</a></div>
</div>
<div class="fw">
     <p>shareeditflag <span>test</span></p>
</div>
<table>
     <tbody>
     </tbody>
</table>

字符串期望

<p>hello</p>
<p class="test">hello world <br>
     <p>First LI</p>
     <p>Second LI <a href="">link</a></p>
</p>
<p class="fw">
     <p>shareeditflag <p>test</p></p>
</p>
<p>
     <p>
     </p>
</p>

在jquery方式中这是无法完成的,因为当深层节点出现问题时,它需要循环直到没有非白名单?

$('*:not(p,br)').replaceWith($('<p>' + this.innerHTML + '</p>'));

最佳答案

遵循概述的策略here ,您可以创建一个新的 <p>元素,用你旧的 <div> 的内容填充它s,插入新元素,然后删除原始元素:

  var test = document.getElementsByClassName("test")[0];
  var fw = document.getElementsByClassName("fw")[0];

  var ptest = document.createElement("p");
  ptest.innerHTML = test.cloneNode(true).innerHTML;
  parent = test.parentNode;
  parent.insertBefore(ptest, test);
  parent.removeChild(test);

  var pfw = document.createElement("p");
  pfw.innerHTML = fw.cloneNode(true).innerHTML;
  parent = fw.parentNode;
  parent.insertBefore(pfw, fw);
  parent.removeChild(fw);

但是,您必须首先解决 HTML 的问题,因为这些方法都不能用于处理格式错误的 HTML。在本例中,输入 <li> s 在列表中,然后输入 <table> <tbody> 中的内容(或表行和列)。例如:

<p>hello</p>

<div class="test">
  hello world 
  <br>
  <ul>
     <li>First LI</li>
     <li>Second LI <a href="">link</a></li>
   </ul>
</div>

<table id="fw" class="fw">
  <tr>
    <td>
     <p>shareeditflag</p>
   </td>
  </tr>
</table>

关于javascript - 如何用另一个标签替换字符串 HTML 标签?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31064275/

相关文章:

javascript - 使用jquery加载图像信息

javascript - window.location.replace 登录表单问题(html、javascript)

javascript - Polymer 1.0 移动网络应用程序看起来不正确

javascript - 当用户单击模态触发器时,模态未打开

Jquery - 通过 id 设置选择列表选项

javascript - 如何使用 DOM 保持 html 表格尺寸相同

javascript - 单击选项卡时如何提交表单

javascript - 我可以在我的网站上使用或允许使用媒体 key 吗

javascript - 如何在Bootstrap中模仿模态弹窗的底纹效果?

javascript - 通过帖子传递对象