AngularJS:可以在同一指令中清除和链接
AngularJS: Possible to sanitize and linky in same directive?
如果我尝试用linky过滤snippet,则输入将不再经过净化/渲染/'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"
相关文章:
- 在指令控制器中使用$attrs时出现问题
- 参数变量出现ngTable指令问题
- 在AngularJS应用程序中使用封装指令和路由的推荐方式是什么
- document.open/document.write没有正确地清除chrome中的文档——这是chrome的错误吗
- 单击jquery清除输入值
- 使用每次都不同的transclude重复指令
- 打开一个模态并将其链接到AngularJS中的指令
- 从html创建一个指令,该指令按类名应用函数
- 将JSON对象传递给angular指令
- 如何使用ngrepeat和双向绑定获得指令的隔离范围
- JavaScript指令不能像我想象的那样工作
- AngularJs指令,该指令创建内部有数据对象的新指令
- AngularJS指令只识别双向绑定类型
- 从控制器继承了隔离的作用域以生成可重用的指令
- AngularJS指令出错-无法读取属性'编译'的未定义
- 如何在Microsoft VirtualEarth 6.3中使用纯javascript清除整个形状层
- 如何防止在清除间隔之前执行 setInterval() 之后的指令
- AngularJS:可以在同一指令中清除和链接
- 清除嵌套指令中的无效输入字段
- 清除$destroy上的指令作用域变量