【发布时间】:2012-11-12 01:02:27
【问题描述】:
我正在使用 jQuery 通过 Ajax 请求完整的 HTML5 文档。我希望能够解析它们并将元素传输到我的主页 DOM,理想情况下适用于所有主要浏览器,包括移动设备。我不想创建 iframe,因为我希望该过程尽可能快。使用 Chrome 和 Firefox,我可以执行以下操作:
var contents = $(document.createElement('html'));
contents[0].innerHTML = data; // data : HTML document string
这将创建一个适当的文档,有点令人惊讶,只是没有文档类型。然而,在 IE9 中,可能不会使用 innerHTML 来设置 html 元素的内容。我尝试执行以下操作,但没有任何运气:
-
创建一个 DOM,打开它,写入它并关闭它。问题:在
doc.open上,IE9 会抛出一个名为Unspecified error.的异常。var doc = document.implementation.createHTMLDocument(''); doc.open(); doc.write(data); doc.close(); -
创建一个 ActiveX DOM。这一次,结果更好,但是在文档之间传输/复制元素时,IE9 崩溃了。不好,因为不支持 IE8(adoptNode / importNode 支持)。
var doc = new ActiveXObject('htmlfile'); doc.open(); doc.write(data); doc.close(); contents = $(doc.documentElement); document.adoptNode(contents);
我正在考虑递归地重新创建元素,而不是在我的文档之间传输它们,但这似乎是一项昂贵的任务,因为我可以有很多节点要传输。我喜欢我的最后一个 ActiveX 示例,因为它很可能适用于 IE8 和更早版本(至少用于解析)。
对此有什么想法吗?同样,我不仅需要能够解析 head 和 body,而且还需要能够将这些新元素附加到我的主 dom。
非常感谢!
【问题讨论】:
标签: javascript jquery ajax dom replace