我是一个初学者,所以对不起,如果无法解决,我很抱歉:)
我正在尝试使用自定义函数通过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))
之后添加更多信息,但这似乎也无法解决该问题。 最佳答案
xmlhttp.onreadystatechange = function(){
if(xmlhttp.readyState == 4){
xmlDoc=xmlhttp.responseXML;
var foo = xmlDoc.getElementsByClassName("gridCellAlt");
}
}
关于javascript - 调用DOM时Javascript对象/函数不起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9196759/