我有一个像这样的问答网站。我也有一个textarea及其下的预览(与SO完全相同)。我使用markdown库将某些符号转换为HTML标签。例如JS库替换**
为<b>
。好的,一切都很好。
现在,我需要转义具有属性的HTML标记。我可以这样用PHP来做到这一点:
<?php
$data = <<<DATA
<div>
<p>These line shall stay</p>
<p class="myclass">Remove this one</p>
<p>But keep this</p>
<div style="color: red">and this</div>
</div>
DATA;
$dom = new DOMDOcument();
$dom->loadHTML($data, LIBXML_HTML_NOIMPLIED);
$xpath = new DOMXPath($dom);
$lines_to_be_removed = $xpath->query("//*[count(@*)>0]");
foreach ($lines_to_be_removed as $line) {
$line->parentNode->removeChild($line);
}
// just to check
echo $dom->saveHtml($dom->documentElement);
?>
我不确定上面的代码是最好的,但是如您所见(在我链接的小提琴中),它可以按预期工作。我的意思是,它将删除至少一个属性的节点。现在,我需要通过JS (或jQuery) 来做到这一点(对于textarea预览模拟器,我需要这样做)。无论如何,我该怎么做?我需要正则表达式吗?
您可以执行以下操作:
$('.myTextArea *').each(function(){
if (this.attributes.length)
$(this).remove();
});
它不是最有效的,但是如果只是文本区域预览,那应该没问题。我建议尽可能少地运行它。据我所知,没有选择器(jQuery或其他方式)可以做到这一点……所以您必须让JS来工作。
根据评论进行编辑:
要不删除元素,只需删除周围的标签,请执行以下操作:
$('.myTextArea *').each(function(){
if (this.attributes.length)
this.outerHTML = this.textContent;
});
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句