需要javascript / ajax帮助

时间:2010-10-27 09:11:16

标签: javascript ajax

如何从中获取文档对象?

var xmlobject = (new DOMParser()).parseFromString(xmlstring, "text/xml");

1 个答案:

答案 0 :(得分:1)

在您的示例中,xmlobject 是文档对象according to MDC。根据{{​​3}},在IE上,您需要使用特定于IE的ActiveX对象而不是DOMParser

var xmlDoc, parser;
if (window.DOMParser) {
    parser = new DOMParser();
    xmlDoc = parser.parseFromString(text,"text/xml");
}
else { // Internet Explorer
    xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
    xmlDoc.async="false";
    xmlDoc.loadXML(text); 
}

你说getElementById无效。请注意,id默认情况下不是XML中的特殊属性(“ID”类型的属性),因此,即使您为元素提供id属性,getElementById也不会工作(它应该返回null)。 w3schools中的详细信息。我从来没有这样做过,但我假设您通过DTD为“ID”类型指定了一个属性。

但是,如果没有一个,您可以使用其他遍历机制。例如(W3C docs for getElementById):

var xmlDoc, parser, text, things, index, thing;

text =
    '<test>' +
    '<thing>Thing 1</thing>' +
    '<thing>Thing 2</thing>' +
    '</test>';
if (window.DOMParser) {
    parser = new DOMParser();
    xmlDoc = parser.parseFromString(text,"text/xml");
}
else { // Internet Explorer
    xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
    xmlDoc.async="false";
    xmlDoc.loadXML(text); 
}
things = xmlDoc.documentElement.getElementsByTagName('thing');
for (index = 0; index < things.length; ++index) {
    thing = things.item(index);
    display(index + ": " + getText(thing));
}

...其中getText是:

function getText(element) {
    return textCollector(element, []).join("");
}
function textCollector(element, collector) { 
    for (node = element.firstChild; node; node = node.nextSibling) { 
        switch (node.nodeType) { 
            case 3: // text 
            case 4: // cdata 
            collector.push(node.nodeValue); 
            break; 
          case 8: // comment 
              break; 
          case 1: // element 
            if (node.tagName == 'SCRIPT') { 
                break; 
            } 
            // FALL THROUGH TO DEFAULT 
            default: 
            // Descend 
            textCollector(node, collector); 
            break; 
        } 
    }
    return collector;
}   

getText是我使用live copyjQueryClosurePrototypeYUI等库的原因的一个很好的例子。你觉得把文本放在一个元素里会很简单,如果元素里面只有一个文本节点,那么就是 [正如我们的thing所做的那样如果没有,那么,any of several others。)