Javascript AngularJS和Sanitize-不使用ngBind指令清理HTML
假设我们需要清理HTML字符串,并且不能使用ng bind HTML指令,例如:Javascript AngularJS和Sanitize-不使用ngBind指令清理HTML,javascript,angularjs,html-sanitizing,Javascript,Angularjs,Html Sanitizing,假设我们需要清理HTML字符串,并且不能使用ng bind HTML指令,例如: <span data-toggle="tooltip" title="Edit {{customer.name}}">Text</span> 文本 如果customer.name中有特殊字符,则该行将以html版本打印,如é而我们想要的是é 我测试过: $sce.trustAsHtml(customer.name) $sce.parseAsHtml(customer.nam
<span data-toggle="tooltip" title="Edit {{customer.name}}">Text</span>
文本
如果customer.name中有特殊字符,则该行将以html版本打印,如é代码>而我们想要的是é
我测试过:
$sce.trustAsHtml(customer.name)
$sce.parseAsHtml(customer.name)
但是没有什么可以“翻译”这个html。如何做到这一点
一个简短的解释是:如何在指令中清理html(而不是在带有ng bind html的正文中)。来自:
ngBindHtml使用$sce.parseAsHtml(绑定表达式)。以下是实际代码(稍微简化):
所以我认为您只需要$sce.parseAsHtml
()
如果您无法说服angular打印HTML,您可以尝试使用
customer.name.replace(/é/g, String.fromCharCode(233));
您可以在此处找到一些基本代码:
这应该行得通,但这肯定不是最好的解决方案。您应该始终使用ngbindhtml
它不必如此复杂
相反,在元素上使用setAttribute
和textContent
(V.S.innerHTML),浏览器本身将为您进行清理
// To set element attributes
$span.setAttribute("title", "Edit" + customer.name);
// To set element content
$span.textContent = customer.name;
有关更多详细信息,请参阅。当然,这些是一次性绑定,因此如果您需要更新,只需将$watch
放在中间。是的,我知道这个解决方案,替换将始终有效。但是我的问题是关于使用ngSanitize插件,以便对ngbind html
之外的每个html字符(甚至不安全)进行清理,我的意思是在不能像我展示的示例那样使用指令的地方。不管怎样,谢谢你的帮助。在问阿金之前,我确实试过那个方法。我做了一个函数return$sce.parseAsHtml(value)
,但它不起作用,在HTMLtitle=“Edit{{{parseCode(customer.name)}}”
中。是的,它可以提供解决方案,没有那么优雅或有角度的解决方案。它可以在控制器中生成大量源代码,这取决于您必须执行的sanizitation的数量,甚至是考虑到范围和监视的模块化功能。这是我唯一的解决办法,我想我必须接受它。非常感谢你的帮助。
// To set element attributes
$span.setAttribute("title", "Edit" + customer.name);
// To set element content
$span.textContent = customer.name;