【问题标题】:Is there an alternative to XML.innerHTML in Microsoft Edge?Microsoft Edge 中是否有 XML.innerHTML 的替代品?
【发布时间】:2017-01-09 17:04:01
【问题描述】:

我有一个 Web 应用程序,它采用 XML 并使用 CSS 对其进行样式设置。要将 XML 显示为 HTML,我有一些 JavaScript,例如:

document.getElementById("reportBody").innerHTML = myXml.innerHTML;

这在 Chrome 和 Firefox 中效果很好,但 Microsoft Edge 将 .innerHTML 视为未定义的 XML。我应该使用哪些不同的功能在浏览器中效果更好?为什么 Edge 对待 innerHTML 的方式与其他人不同?

阅读This stack overflow question 后,我尝试使用 XMLSerializer 让 XML 显示在 html 中:

var s = new XMLSerializer();
var myXmlString = s.serializeToString(myXml);
document.getElementById("reportBody").innerHTML = myXmlString;

我不喜欢这种方式,因为serializeToString 序列化整个 xml(包括父元素),而不是父节点的子节点。有没有更好的方法可以在更多浏览器上使用?

【问题讨论】:

  • 在序列化之前,您可以使用 DOM 方法将 XML 爬升到您感兴趣的任何节点。一旦你找到了你喜欢的元素,你可以创建一个临时的 DIV 并用 innerHTML 写入它,然后在写入 reportBody 之前获取它的 innerHTML。请注意,innerHTML 不能很好地与包含 JavaScript 的 html 配合使用,但是您可以使用像 jQuery 这样的框架来提供 .html(...) 方法等
  • 呵呵,这一次我同意微软的选择。另外,您是否考虑过使用 XSLT 来设置 XML 样式?这就是它的用途。当然,如果您有一个几乎可行的解决方案,我不希望您更改语言,但下次您可能需要考虑它。
  • 我已经在jsfiddle.net/foowr6rx 尝试了一个快速测试,对我来说使用 Edge (Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.79 Safari/537.36 Edge/14.14393) 在最新的 Windows 10 innerHTML 上不是未定义的,并且分配和 CSS 样式有效。所以考虑编辑你的问题并向我们展示一个最小但完整的代码 sn-p 不适用于 Edge。
  • @MartinHonnen 你的 jsfiddle 正是我想要做的。它在我的 Edge 版本中不起作用,所以我检查了版本,果然,我的版本是旧的。我以为 Edge 会自动更新,但事实并非如此。谢谢!

标签: javascript xml


【解决方案1】:

确保您的 Microsoft Edge 版本至少为 14。XML.innerHTML 现在可以在 Microsoft Edge 中使用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-23
    • 2010-09-13
    相关资源
    最近更新 更多