如果我尝试使用 linky 过滤片段,则输入不再被净化/呈现/'html-ized'。即我希望能够结合两者的效果:
<div ng-bind-html="snippet"></div>
和
<div ng-bind-html="snippet | linky"></div>
这是小提琴:http: //jsfiddle.net/5uSnj/
如果我尝试使用 linky 过滤片段,则输入不再被净化/呈现/'html-ized'。即我希望能够结合两者的效果:
<div ng-bind-html="snippet"></div>
和
<div ng-bind-html="snippet | linky"></div>
这是小提琴:http: //jsfiddle.net/5uSnj/
linky 将文本作为输入,而不是 html。如果您想要一个将 html 作为输入的过滤器,那么它的工作方式必须完全不同。请参阅:https ://github.com/angular/angular.js/pull/3285#issuecomment-21958391
抱歉,Igor Minar 我投票给你答案,但我想在没有其他服务的情况下发布你的功能:
app.filter('htmlLinky', function($sanitize, linkyFilter) {
var ELEMENT_NODE = 1;
var TEXT_NODE = 3;
var linkifiedDOM = document.createElement('div');
var inputDOM = document.createElement('div');
var linkify = function linkify(startNode) {
var i, ii, currentNode;
for (i = 0, ii = startNode.childNodes.length; i < ii; i++) {
currentNode = startNode.childNodes[i];
switch (currentNode.nodeType) {
case ELEMENT_NODE:
linkify(currentNode);
break;
case TEXT_NODE:
linkifiedDOM.innerHTML = linkyFilter(currentNode.textContent);
i += linkifiedDOM.childNodes.length - 1
while(linkifiedDOM.childNodes.length) {
startNode.insertBefore(linkifiedDOM.childNodes[0], currentNode);
}
startNode.removeChild(currentNode);
}
}
return startNode;
};
return function(input) {
inputDOM.innerHTML = input;
return linkify(inputDOM).innerHTML;
};
});
ng-bind-html="html | htmlLinky"