调用DOM时Javascript对象/函数不工作

调用DOM时Javascript对象/函数不工作,javascript,xmlhttprequest,getelementsbyclassname,Javascript,Xmlhttprequest,Getelementsbyclassname,我是个初学者,所以如果有什么不合理的地方,我很抱歉:) 我正在尝试按类名搜索XMLDOM,使用一个自定义函数,它似乎只有在搜索脚本所在的文档时才起作用 这就是功能: Object.prototype.getElementsByClassName = function(getElementsByClass) { function getElementsByClass(searchClass,node,tag) { var classElements = new Array();

我是个初学者,所以如果有什么不合理的地方,我很抱歉:)

我正在尝试按类名搜索XMLDOM,使用一个自定义函数,它似乎只有在搜索脚本所在的文档时才起作用

这就是功能:

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");
Object.prototype.getElementsByClassName=函数(getElementsByClass){
函数getElementsByClass(搜索类、节点、标记){
var classElements=新数组();
if(node==null)
节点=文档;
if(标记==null)
标记='*';
var els=node.getElementsByTagName(标记);
var elsLen=els.长度;
var pattern=newregexp(“(^\\\\\s)”+searchClass+”(\\\\s\\\$);
对于(i=0,j=0;i
(随后我将foo输出到下面的某个位置-输出效果良好。)

现在,如果我使用
xmlDoc.getElementsByTagName
并使用标记名,那么一切都可以正常工作-但是,我将要访问的页面使用类名,因此我想使用
xmlDoc.getElementsByClassName
。如果我使用
var foo=document.getElementsByClassName(“gridCellAlt”),上述脚本完全可以正常工作;
并在运行脚本的页面中包含我正在访问的信息,但当我尝试在xmlDoc DOM上使用它时,它不起作用。总之,脚本唯一不起作用的时候是在我使用xmlDoc(而不是文档)时,和
getElementsbyClassName
结合使用。如果我使用document和getElementsbyClassName,它就可以了。如果我使用xmlDoc和get
elementsByTagName,它就可以了


我认为
getElementsByClassName
没有在DOM节点内正确搜索,但是即使我将
class=“gridcelllalt”
放在测试DOM的根节点的某个地方,它仍然找不到它。我尝试在
foo=xmlDoc.getElementsByClassName(“gridcelllalt”,信息在这里))
但这似乎也不能解决问题。

这是一个问题。因为XMLHTTPRequest是异步执行的,所以您需要检查它何时成功返回(readyState 4),然后对XML进行操作(因为届时它将拥有它)。否则,您可能会尝试对尚未初始化的内容进行操作。我认为这不是问题所在,就像我使用xmlDoc.getElementsbyTagName(“sometaghere”)一样;我得到了结果。只有在使用自定义xmlDoc.GetElementsByCassName时,它才找不到任何东西。虽然这可能是一个问题,并且可能适合包含在脚本中,但我不认为这是导致我的问题的原因-而且,在测试中添加它并没有解决问题。
xmlhttp.onreadystatechange = function(){
        if(xmlhttp.readyState == 4){
            xmlDoc=xmlhttp.responseXML;
            var foo = xmlDoc.getElementsByClassName("gridCellAlt");
        }
    }