2016-06-08 74 views
2

我有一个字符串包含一些html标签中的内容,也有一些文本。如何使用javascript或angularjs从字符串中提取html标记的内容?

它看起来像这样:

var str = "<p></p><p><i>blabla</i></p><p><i><b>blaaaaaablaaaaa</b></i></p><iframe src="..." height="111" width="333"></iframe><p></p><p><sub>hello blabla</sub></p><p><br></p><iframe src="..." height="444" width="888"></iframe>" 

我想在Javascript或AngularJS不知何故只提取了一些标签(包括内容属性),然后把它们放进一个数组。

例如,如果我只想要标签,我应该有这样的:

var array = ["<iframe src='...' height='111' width='333'></iframe>", "<iframe src='...' height='444' width='888'></iframe>"]; 

如果我想<p>标签则:

var array = ["", "<i>blabla</i>","<i><b>blaaaaaablaaaaa</b></i>","","<sub>hello blabla</sub>","<br>"]; 

什么建议吗?谢谢 !

NOTE:请不要回答请使用jquery拜托!

+0

我相信这将属于HTML解析。所以我会为此搜索。这是屁股疼痛。否则,看看是否有人在Regex中有很好的实现。 –

+0

http://stackoverflow.com/questions/9189338/how-to-extract-content-of-html-tags-from-a-string-using-javascript-or-jquery检查了这一点..这里是你的答案。 –

+0

提取意味着也从字符串中删除?你需要一串iframe吗?或者他们可以成为dom元素吗?你对结果做什么? – charlietfl

回答

2

您可以创建一个角度元素并从中获取文本。

例子:

$scope.array =[]; 
$scope.eles= 
angular.element(str).find('iframe'); 
[].forEach.call($scope.eles, function (ctl) { 
    $scope.name.push(angular.element(ctl).text()) 
}); 

这里是一个演示:http://jsfiddle.net/Lvc0u55v/5122/


编辑 要获取标签的所有HTML,你可以这样做:

angular.element(str).find('iframe'); 
    [].forEach.call($scope.eles, function (ctl) { 
     $scope.name.push(ctl.outerHTML) 
    }); 

演示:http://jsfiddle.net/Lvc0u55v/5123/

+0

在正确的轨道上,但文本()不会提供iframe元素的outerHTML – charlietfl

+0

这是回答我的问题** 50%**我还需要具有他的属性的HTML标记:'[“