angularjs输出纯文本而不是html

Har*_*rry 66 html javascript angularjs

我有这样的文字:

<span>My text</span>
Run Code Online (Sandbox Code Playgroud)

我想显示没有标签:

My text
Run Code Online (Sandbox Code Playgroud)

我也不想应用标签,我想剥离它们.有什么简单的方法可以做到这一点?

Angular html:

<div>{{myText | htmlToPlaintext}}</div>
Run Code Online (Sandbox Code Playgroud)

Uto*_*pik 208

jQuery大约是SLOWER的40倍,请不要使用jQuery来完成这个简单的任务.

function htmlToPlaintext(text) {
  return text ? String(text).replace(/<[^>]+>/gm, '') : '';
}
Run Code Online (Sandbox Code Playgroud)

用法:

var plain_text = htmlToPlaintext( your_html );
Run Code Online (Sandbox Code Playgroud)

使用angular.js:

angular.module('myApp.filters', []).
  filter('htmlToPlaintext', function() {
    return function(text) {
      return  text ? String(text).replace(/<[^>]+>/gm, '') : '';
    };
  }
);
Run Code Online (Sandbox Code Playgroud)

使用 :

<div>{{myText | htmlToPlaintext}}</div>  
Run Code Online (Sandbox Code Playgroud)

  • jQuery慢了40倍,但你仍然得到8000 ops/s,因此不使用jQuery是因为过早的优化. (10认同)
  • 我实际上更喜欢String(text).replace(/ <[^>] +>/gm,'').我已经使用它多年没有任何问题. (6认同)
  • 您应该在那里添加一个空检查,否则它将输出"null":`return text?字符串(文本).replace(/ <[^>] +>/gm,''):"";` (4认同)
  • 我永远不会添加jQuery依赖只是为了将html转换为文本,但如果我的项目已经使用jQuery,我会选择jQuery解决方案,因为我认为自定义编写的正则表达式不太可读,测试较少且不太可靠.您的正则表达式是否可以防止[所有可能形式的XSS](https://www.owasp.org/index.php/XSS_Filter_Evasion_Cheat_Sheet)? (3认同)

Dav*_*y R 21

来自https://docs.angularjs.org/api/ng/function/angular.element

angular.element

将原始DOM元素或HTML字符串包装为jQuery元素(如果jQuery不可用,angular.element委托给Angular的内置jQuery子集,称为"jQuery lite"或"jqLit​​e.")

所以你可以做到:

angular.module('myApp.filters', []).
  filter('htmlToPlaintext', function() {
    return function(text) {
      return angular.element(text).text();
    }
  }
);
Run Code Online (Sandbox Code Playgroud)

用法:

<div>{{myText | htmlToPlaintext}}</div>
Run Code Online (Sandbox Code Playgroud)

  • 我建议将文本包装在一个元素中,否则像"hi"这样的普通旧字符串将返回一个空字符串`angular.element('<div>'+ text +'</ div>').text();` (3认同)
  • 我也会避免这种做法; 可能不会像完整的jQuery那样长,但肯定比接受的答案慢得多. (2认同)
  • 我更喜欢这种解决方案使用正则表达式,至少在速度不重要的情况下.它更正确,实际上将html转换为纯文本,而不是标志,特殊实体和所有. (2认同)