javascript/ajax帮助需要
问题描述:
我该如何获取文档对象?javascript/ajax帮助需要
var xmlobject = (new DOMParser()).parseFromString(xmlstring, "text/xml");
答
在你的榜样,xmlobject
是文档对象,according to MDC。据w3schools,在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
)。详情请见W3C docs for getElementById
。我从来没有做过,但我认为你会通过DTD为“ID”类型分配一个属性。
但是,如果没有,您可以使用其他遍历机制。例如(live copy):
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
就是为什么我使用图书馆像jQuery,Closure,Prototype,YUI,或者any of several others一个很好的例子这个东西,你会认为在一个元素中获得文本会很简单,如果元素里面只有一个文本节点,它就是是 [因为我们的thing
秒以上]。如果它没有,那么,it gets complicated fast。)
hmmmm ....我无法调用像getElementById等等的方法...这就是为什么......猜猜是否有其他错误... – 2010-10-27 09:28:17
@Arun :您可能正在寻找'xmlDoc.documentElement' - 我会做一个简单的例子。 – 2010-10-27 09:30:08
@阿伦:我已经添加了一个例子。 – 2010-10-27 09:47:56