我是初学者,所以如果事情没有意义我很抱歉:)
我正在尝试通过ClassName搜索XML DOM,使用自定义函数,该函数在我搜索脚本所在的文档时似乎只能工作。
这是功能:
Object.prototype.getElementsByClassName = function(getElementsByClass) {
function getElementsByClass(searchClass,node,tag) {
var classElements = new Array();
if ( node == null )
node = document;
if ( tag == null )
tag = '*';
var els = node.getElementsByTagName(tag);
var elsLen = els.length;
var pattern = new RegExp('(^|\\\\s)'+searchClass+'(\\\\s|$)');
for (i = 0, j = 0; i < elsLen; i++) {
if ( pattern.test(els[i].className) ) {
classElements[j] = els[i];
j++;
}
}
return classElements;
}
xmlhttp=new XMLHttpRequest();
xmlhttp.open("GET","somexml.xml",false);
xmlhttp.send();
xmlDoc=xmlhttp.responseXML;
var foo = xmlDoc.getElementsByClassName("gridCellAlt");
(然后我在某处输出foo - 输出一切正常。)
现在,如果我使用xmlDoc.getElementsByTagName
并使用标记名称,一切正常 - 但是,我要访问的页面使用了类名,因此我想使用xmlDoc.getElementsByClassName
。如果我使用var foo = document.getElementsByClassName("gridCellAlt");
并在运行脚本的页面中包含我访问的信息,上面的脚本完全正常,但是当我尝试在xmlDoc DOM上使用它时它不起作用。总结一下:脚本不起作用的唯一时间是我使用xmlDoc(而不是文档)和getElementsbyClassName
结合使用。如果我使用document和getElementsByClassName就好了。如果我使用xmlDoc并获得elementsByTagName
就好了。
我认为getElementsByClassName
没有正确地在DOM节点内搜索,但即使我将class="gridCellAlt"
放在测试DOM的根节点中某处,它仍然找不到它。我尝试在foo = xmlDoc.getElementsByClassName("gridCellAlt", (info here))
后面添加更多信息,但这似乎也没有解决这个问题。
答案 0 :(得分:2)
xmlhttp.onreadystatechange = function(){
if(xmlhttp.readyState == 4){
xmlDoc=xmlhttp.responseXML;
var foo = xmlDoc.getElementsByClassName("gridCellAlt");
}
}