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

时间:2012-02-08 15:53:53

标签: javascript xmlhttprequest getelementsbyclassname

我是初学者,所以如果事情没有意义我很抱歉:)

我正在尝试通过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))后面添加更多信息,但这似乎也没有解决这个问题。

1 个答案:

答案 0 :(得分:2)

xmlhttp.onreadystatechange = function(){
        if(xmlhttp.readyState == 4){
            xmlDoc=xmlhttp.responseXML;
            var foo = xmlDoc.getElementsByClassName("gridCellAlt");
        }
    }