innerHTML与XML Elements一起使用?

时间:2011-05-29 22:45:54

标签: javascript xml dom innerhtml

根据 JavaScript:The Definitive Guide :“尽管名称如此,但innerHTML可以与XML元素以及HTML元素一起使用”。

但是,当我实际尝试访问XML Element对象的innerHTML属性时,会返回undefined

var xml = $.ajax({url: "test.xml", async: false}).responseXML.documentElement;
console.log(xml.innerHTML); // displays "undefined" in console log

这种行为的解释是什么?

的test.xml:

<?xml version="1.0" encoding="utf-8"?>
<foo><bar>baz</bar></foo>

4 个答案:

答案 0 :(得分:6)

解释是这本书在这一点上是错误的。

IE中的XML元素具有非标准xml属性,提供相当于innerHTML的属性。对于其他浏览器,您需要使用XMLSerializer

答案 1 :(得分:5)

早期的答案并未涉及截至2014年9月的新浏览器。使用以下内容创建XML文档时:

var parser = new DOMParser(); 
var doc = parser.parseFromString(data, "text/xml");

其中data是XML文档的字符串,则以下内容为真:

  • 在Firefox 28和Chrome 36中,doc中的节点都有一个innerHTML字段,其中包含节点内容的XML序列化。

  • 在IE 9,10和11,Safari 7.0和Opera 12中,doc中的节点既没有innerHTML字段也没有xml字段。我无法找到可以代表这些领域的东西。除了对这些浏览器使用XMLSerializer之外,似乎没有任何其他选择。

答案 2 :(得分:2)

HTML5定义了XML Elements上的innerHTML(尽管名称,使用XML解析器/序列化器)。什么都没有实现这一点。 Opera在XHTML中有一段时间支持innerHTML(虽然通常不是XML),但是使用HTML解析器/序列化器。

答案 3 :(得分:-1)

你可以这样做,但我更喜欢使用jQuery,因为它更容易实现。 jQuery方式是选择所需的元素容器。然后,您可以使用html()属性来更改或获取元素的innerHTML。

$("myxmltag").html("<achildtag>Hello</achildtag><anotherchildtag>World!</anotherchildtag>");

有关此属性的更多信息,请参阅:http://api.jquery.com/html/

另外,不要忘记html()和text()之间的区别,并且可以使用其他属性来使用jQuery操作xml中节点内的元素,如append(),prepend(),after( )等等......