Javascript - 清理特定的html元素

时间:2015-03-08 11:35:53

标签: javascript html

首先,我以html的形式从API返回。这将在我的jqgrid中使用。样本返回将是这样的 我的对象的示例名称是obj。然后obj.something在下方。

<div title="custom_title">
    <div id="upper">
         data from somewhere and this is the part that sometimes need to be sanitized without affecting the other tags
    </div>

</div>

到目前为止我尝试过这样做:     var esc = $('');     然后做了这个:esc.text(obj.something).html();但它消毒了所有这些。 有什么我可能不知道如何纯粹在javascript上消毒吗?

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

在这种情况下,您可以使用DOMPurify

  

DOMPurify清理HTML并防止XSS攻击。您可以使用充满脏HTML的字符串提供DOMPurify,它将返回一个包含干净HTML的字符串。 DOMPurify将删除包含危险HTML的所有内容,从而防止XSS攻击和其他恶意行为。

答案 1 :(得分:-1)

在此同意@Juhana:&#34; 返回包含在HTML中的未经过整理的输出是您应该避免的事情。&#34;但是如果没有,你想控制和消毒DOM,你可以在普通的JS中做到这一点:

&#13;
&#13;
obj = {};
obj.something = '<div title="custom_title"><div id="upper">data from somewhere and this is the part that sometimes need to be sanitized without affecting the other tags</div></div>';
         
var container = document.createElement("div"); //create an element in memory
container.insertAdjacentHTML('afterbegin', obj.something); //serialize the HTML string into the structure.

   container.querySelector("#upper").innerHTML = ""; //empty the element, removing the data in it. (or do something else with it, like stripping all the a elements that do not start with http(s).

console.log(container)
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
&#13;
&#13;
&#13;

它将HTML obj呈现为内存元素,而不是对其执行DOM操作并删除ID为upper的div的内容。完成后,将容器div的内容插入到网格中。