【发布时间】:2015-12-01 19:07:02
【问题描述】:
我在 angularjS 中做一个应用程序,我有这个功能来删除 #(hashes) 并将它们组合成链接。
$scope.getAllHashes = function(event){
var x = event;
var collect = '';
var link = '';
for (i = 0; x.length > i; i++) {
//remove #
link = x[i].substr(1);
collect += "<a href='#/search/" + link + "'>" + x[i] + "</a> ";
}
return document.getElementsByClassName('hashes').innerHTML = collect;
};
它的返回文本:
<a href='#/search/aaa'>#aaa</a> <a href='#/search/bbb'>#bbb</a> <a href='#/search/cccc'>#cccc</a>
而不是链接:
#aaa #bbb #ccc
源来自这个数组:
$scope.events =
[
{
id: 1,
datetime: 'FRI, 6 NOV 10:00 AM',
title: 'Event Title goes here - lalelalela',
address: {
road: '650 Address Rd',
city: 'Toronto',
state: 'Ontario',
postal: 'A1B1C3',
country: 'CA'
},
hashes: ['#aaa','#bbb','#cccc']
}, .....
这是来自html源代码的代码
<span class="hashes ng-binding">
<a href='#/search/aaa'>#aaa</a> <a href='#/search/bbb'>#bbb</a> <a href='#/search/cccc'>#cccc</a>
</span>
我不确定为什么它显示为文本而不是 html。
【问题讨论】:
-
我假设您使用 ng-bind 或 {{}} 来输出带角度的 html,对吗?只输出文本。如果要输出 html,则必须使用正确的指令。在控制器函数中更改元素的 innerHTML 也可能是个坏主意。您应该更新数据,或者直接在视图中输出函数的结果。
-
{{ getHashes({ data: eventObject.hashes }) }}
-
那么是的,你不能那样输出 html,只能输出字符串。 docs.angularjs.org/api/ng/directive/ngBindHtml
-
我只是调用函数。添加数据的是纯javascript。函数内。它在我使用 .class 的 #id instad 之前工作。有更好的方法可以确保做到这一点。但我想知道为什么它适用于 ID 而不是 CLASS
-
因为通过 id 你得到一个具有 innerHTML 属性的 DOM 节点,而通过类你得到一个 没有 的 DOM 节点集合innerHTML 属性。
标签: javascript angularjs text innerhtml