总而言之,我们正在使用AngularJS开发一个Web应用程序,并且我们有一个用例/需求(根本不会经常发生),在此我们需要从静态服务器中检索完整的HTML文档。但是,似乎$ http对象返回了原始HTML字符串作为其“数据”。我们试图避免使用外部库(例如jQuery),但是我们需要将该原始HTML字符串解析为可查询的DOM对象。我们可以使用iframe并完成它,但是出于众所周知的原因,我们也试图避免使用iframe。
因此,问题是:AngularJS是否具有HTML解析器(就像JSON一样)?否则,处理这种情况的最优雅方式是什么?
PS:我们曾尝试过筛选Angular的API文档,但老实说,它们是命中注定的,也不是直觉的。
如果您需要以编程方式从字符串中获取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和更高版本支持。
querySelectorAll
“包装”方法:
var div = document.createElement('div'); div.innerHTML = '<div>some html</div>'; var result = div.childNodes;
…请注意,如果将SVG或MathML放入其中,则此方法将返回HTMLUnknownElements。他们会“看起来”正常,但不会起作用。