работает innerHTML с элементами XML? - PullRequest
2 голосов
/ 30 мая 2011

Согласно JavaScript: полное руководство : «Несмотря на свое имя, innerHTML может использоваться как с элементами XML, так и с элементами HTML».

Однако, когда я действительно пытаюсь получить доступсвойство innerHTML объекта XML-элемента, 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 ]

6 голосов
/ 30 мая 2011

Объяснение состоит в том, что книга ошибочна в этом вопросе.

XML-элементы в IE имеют нестандартное свойство xml, которое обеспечивает эквивалент innerHTML. Для других браузеров вам необходимо использовать XMLSerializer.

5 голосов
/ 11 сентября 2014

Предыдущие ответы не относятся к более новым браузерам, существующим по состоянию на сентябрь 2014 года. Когда документ 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 голосов
/ 30 мая 2011

HTML5 определяет, что внутри XML-элементов должен быть innerHTML (несмотря на имя, использующее синтаксический анализатор / сериализатор XML).Ничто еще не реализует это.В течение некоторого времени Opera поддерживала innerHTML в XHTML (хотя, в общем, не в XML), но для этого использует анализатор / сериализатор HTML.

0 голосов
/ 30 мая 2011

Вы можете сделать это, но я бы предпочел использовать jQuery, потому что это легче реализовать.Способ jQuery выбирает контейнер элемента, который вы хотите.Затем вы можете использовать свойство html (), чтобы изменить или получить innerHTML вашего элемента.

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

Для получения дополнительной информации об этом свойстве см. http://api.jquery.com/html/

Такжене забывайте о различиях между html () и text (), и вы можете использовать другие свойства для манипулирования элементами внутри узла в вашем xml с помощью jQuery, например append (), prepend (), after () и т. д.

...