如何将字符串 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/