javascript - 如何删除除特定属性之外至少具有一个属性的标签?

标签 javascript jquery html

我有一个文本区域,我的网站用户可以在其中输入自己的内容(基于 ma​​rkdown 标准),然后将其发布到我的网站中。

我使用的库(它根据keydown将markdown转换为HTML)生成没有属性的标签。因此,为了确保用户输入的用户界面安全,我有以下代码:

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 属性或同时具有 srcalt 属性的标签。像这样的东西:

<a href="../path">my link</a>
<img src="../path" alt="something" />

现在我需要编辑 cleanHtml() 函数来删除除上面两个示例之外的每个具有属性的标签。

我怎样才能做到这一点?

最佳答案

检查$(el).attr('src')$(el).attr('src')是否返回未定义:

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>

关于javascript - 如何删除除特定属性之外至少具有一个属性的标签?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41914194/

相关文章:

javascript - 计算圆周长上均匀分布的点

javascript - 创建一个二维关联数组 javascript(与 php 关联数组相同)

javascript - 如果依赖输入中的值不是手动更改,则 Jquery 输入值不会更改

javascript - 使用国家/地区代码作为数组/对象名称?范围界定问题?

javascript - 如何允许用户使用此 JQuery 示例关闭幻灯片?

javascript - 如何使用 jquery 连接 "this"和附加字符串选择器?

javascript - History.js 在初始浏览器窗口加载后未触发

javascript - jQuery 更改页面 - 但我如何/在哪里更改 "acquire"?

javascript - iPad 上的 HTML5 视频播放?

html - CSS 选择器形式 :last-child doesn't work