我是一个初学者,所以对不起,如果无法解决,我很抱歉:)

我正在尝试使用自定义函数通过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/

10-10 00:21