一尘不染

AngularJS $ http HTML解析器

angularjs

总而言之,我们正在使用AngularJS开发一个Web应用程序,并且我们有一个用例/需求(根本不会经常发生),在此我们需要从静态服务器中检索完整的HTML文档。但是,似乎$
http对象返回了原始HTML字符串作为其“数据”。我们试图避免使用外部库(例如jQuery),但是我们需要将该原始HTML字符串解析为可查询的DOM对象。我们可以使用iframe并完成它,但是出于众所周知的原因,我们也试图避免使用iframe。

因此,问题是:AngularJS是否具有HTML解析器(就像JSON一样)?否则,处理这种情况的最优雅方式是什么?

PS:我们曾尝试过筛选Angular的API文档,但老实说,它们是命中注定的,也不是直觉的。


阅读 210

收藏
2020-07-04

共1个答案

一尘不染

如果您需要以编程方式从字符串中获取DOM元素,则将html解析为DOM对象非常简单。

基本上,您将使用DOMParser。

var parser = new DOMParser();
var doc = parser.parseFromString('<div>some html</div>', 'text/html');
doc.firstChild; //this is what you're after.

从那里开始,如果您想使用香草JS查询以从中获取元素(这意味着您出于某种原因不想使用JQuery),则可以执行以下操作:

//get all anchor tags with class "test" under a div.
var testAnchors = doc.firstChild.querySelectorAll('div a.test');

…但是请注意:querySelectorAll仅IE8和更高版本支持。

编辑:其他方法…

“包装”方法:

var div = document.createElement('div');
div.innerHTML = '<div>some html</div>';
var result = div.childNodes;

…请注意,如果将SVG或MathML放入其中,则此方法将返回HTMLUnknownElements。他们会“看起来”正常,但不会起作用。

2020-07-04