IE10和11中的HierarchyRequestError,但不是Chrome或IE9

时间:2014-10-10 10:34:48

标签: javascript xml internet-explorer-10 internet-explorer-11

我有以下内容:

function getSelectedRowXML(grid)
{
    var selectedIndex = grid.selection.getSelected()[0];

    // Initialise DOM
    var xmlDoc = dojox.xml.parser.parse("<claim></claim>");

    var root = xmlDoc.getElementsByTagName("claim")[0];

    // Get DOM for the selected row.
    var rowNode = getRowDOMByIndex(grid, selectedIndex);

    root.appendChild(rowNode);

    return dojox.xml.parser.innerXML(xmlDoc);
}

function getRowDOMByIndex(grid, selectedIndex) {
    var xmlDoc = dojox.xml.parser.parse();
    var rowXMLNode = xmlDoc.createElement(grid.xpath);

    // loop round all columns
    for ( var count = 0; count < grid.model.getColCount(); count++) {
    var tagName = grid.structure[0]["rows"][0][count]["headerName"];

    // Create node for data
    var innerXMLNode = xmlDoc.createElement(tagName);

    // Get node value
    var nodeValue = grid.model.data[selectedIndex][count];

        // if it's a date then format it like yyyy-mm-dd
        if (grid.structure[0]["rows"][0][count]["type"] === "Date") {
            var dateParts = nodeValue.split("/");
            nodeValue = (dateParts[2] + "-" + dateParts[0] + "-" + dateParts[1]);
        }
        // Set the value on the newly created node.
        setTextValue(innerXMLNode, nodeValue);
        // Add details to DOM
        rowXMLNode.appendChild(innerXMLNode);
    }

    return rowXMLNode;
}

目前,root包含:

<incident></incident> 

和rowNode包含一个包含5个子元素的xml列表:

<m-incident-priors-list>
  <m-priors-creation-datetime>2014-10-10 11:33:49.613</m-priors-creation-datetime>
  // plus 4 extra...
</m-incident-priors-list>

错误发生在root.appendChild(rowNode)。在IE9及更早版本和Chrome中,错误不会发生,xml会成功追加,其他方法会按预期运行。但是,在IE10和11中,在appendChild语句中抛出了hierarchyRequestError。

现在我已经阅读了一些地方,当一个节点被附加到自身时发生了这个错误,Null被附加到一个节点或一个节点被附加到一个文本节点但是从我看到的,这三个都不适用对于这种情况。

我是否应该使用其他方法来附加xml或者是否有某种解决方法?

编辑:解决了问题,创建了一个方法,可以确定浏览器是否是IE,并适当地创建一个xml文档。如果是,请使用原始方法,如果不是:

xmlDocument= new ActiveXObject("Microsoft.XMLDOM");
xmlDocument.async=false;
xmlDocument.loadXML(xmlString); 

0 个答案:

没有答案