在AngularJS中过滤-html标签中的文本

Filter in AngularJS - text in html tags

本文关键字:文本 标签 过滤 AngularJS -html      更新时间:2023-09-26

我不太擅长过滤,想写一个基于以下内容的自定义过滤器:

我调用一个服务,该服务返回一个带有HTML字符串的JSON对象,HTML字符串与另一个字符串连接在一起,所以HTML很时髦。

我想从以下返回的HTML字符串中获得text1text2

<span><b>text1</b><b>text2</b>text3</span>

我无法控制以上内容是如何返回给我的,但我只想获得这两个值并将它们连接起来:text1text2

有一个内置的DOM解析器,或者您可以在您的环境中找到一个解析器。请参阅MDN解析XML和元素。所以你可以这样做:

var x = "<span><b>text1</b><b>text2</b>text3</span>";
var oDOM = new DOMParser().parseFromString(x, "text/xml");
var b = oDOM.documentElement.getElementsByTagName("b");
b.length // 2
b[1].innerHTML // text2

HTH

如果你只需要去掉html标签,我认为你可以使用下面的代码

var noHTML =  OriginalString.replace(/(<([^>]+)>)/ig,"");

对于过滤器实现

angular.module('myNoHtmlFilterApp', [])
.filter('noHtml', function() {
  return function(input) {
input = input || '';
var out = input.replace(/(<([^>]+)>)/ig,"");
return out;
  };
})

根据DineSH的回答-我做了这样的事情:

$scope.getTextFromHTML = function(html){
  var oDOM = new DOMParser().parseFromString(html, "text/xml");
  var b = oDOM.documentElement.getElementsByTagName("b");
  return b[0].innerHTML+b[1].innerHTML;
};

我必须预先定义html字符串,因为它还没有在DOM上,就像这样:

var html = "<span><b></b><b></b></span>";

稍后我可能会添加一个for loop,以防有一个字符串我遗漏了,但就目前而言,这是完美的。谢谢你的帮助!