MSIE: добавление XML-элемента к HTML-элементу - PullRequest
0 голосов
/ 15 февраля 2012

Я использую XMLHttpRequest для получения XML с сервера, и я хотел бы добавить его к существующему узлу HTML на странице. Это правильно сформированный HTML, и я добавил xmlns='http://www.w3.org/1999/xhtml' к корневому элементу XML в ответе: отлично работает для Firefox, но IE бомбит с «Такой интерфейс не поддерживается», я думаю, потому что у него есть узел, который я пытаюсь добавить набирается как "IXMLDOMElement".

Вот ответ XML:

<qstat xmlns='http://www.w3.org/1999/xhtml'>
    <ul>
        <li><b>Cycle number:</b> 6</li>
        <li><b>Error:</b> none</li>
    </ul>
</qstat>

А вот Javascript:

var req = new XMLHttpRequest()
req.onreadystatechange = function() {
    if(req.readyState == 4)
    {
        dom = req.responseXML;
        var nodes = dom.firstChild.childNodes;   //Everything under the root node.
        var ele = document.getElementById("qstat");
        for(var i=0; i<nodes.length; i++)
        {
            ele.appendChild(nodes[i]);  // BOMBS HERE.
        }
    }
};

MSIE Debugger (MSIE 8) правильно идентифицирует nodes[0] как имеющий tagName=ul и даже namespaceURI="http://www.w3.org/1999/xhtml", но я предполагаю, что его тип IXMLDOMElement, вызов не работает.

Так есть ли способ преобразовать объекты в nodes в соответствующие объекты узла HTML, которые я могу добавить к элементу?

1 Ответ

3 голосов
/ 15 февраля 2012

Попробуйте следующее:

1) создать элемент HTML

var factory = document.createElement("div");

2) сериализовать элемент XML выборки

var xml = nodes[i].xml || new XMLSerializer().serializeToString(nodes[i]);

3) отобразить xml с помощью innerHTML

factory.innerHTML = xml;

4) получить firstChild из фабричного элемента, который теперь является элементом HTML

var eleHTML = factory.firstChild;

5) добавить eleHTML туда, где он вам нужен:

ele.appendChild(eleHTML);

Подсказка:Вы можете повторно использовать созданный фабрикой DOMHTML элемент

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...