我有一个textarea,我的网站用户在其中输入自己的内容(基于降价标准),然后在我的网站上发布。
我使用的库(将markdown转换为每keydown
的HTML)会生成没有属性的标记。因此,为了保护UI不受用户输入的影响,我有以下代码:
function cleanHtml(html) {
var $doc = $('<span>' + html + '</span>');
$('*', $doc).each(function (index, el) {
if (el.hasAttributes('attributes')) {
while ($(el).contents().length) {
$(el).contents().last().insertAfter(el);
}
$(el).remove();
}
});
return $doc.html();
}
上面的代码删除了至少有一个属性的每个标记。这很好。
最近我发现markdown-converter-library还会生成一些标签,这些标签具有 href 属性或src
和alt
属性。像这样的东西:
<a href="../path">my link</a>
<img src="../path" alt="something" />
现在我需要编辑cleanHtml()
函数来删除除上述两个示例之外的每个具有属性的标记。
我该怎么做?
答案 0 :(得分:1)
检查$(el).attr('src')
或$(el).attr('src')
是否返回undefined:
el.hasAttributes('attributes') && ( !$(el).attr('src') && !$(el).attr('href') )
$('*').each(function(i, el){
if(el.hasAttributes('attributes') && ( !$(el).attr('src') && !$(el).attr('href') ) ) {
$(el).remove();
}
});
p {
width:100px;
height:100px;
background:#ddd;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js"></script>
<a href="http://unsplash.it" style="color:#f44336">my link</a>
<a href="http://unsplash.it" style="color:#f44336;size:16px">Unsplash 2</a>
<img src="http://unsplash.it/100" alt="something" />
<p id="s" data-a="a"></p>