2

我是初学者,如果有什么不明白的地方我很抱歉:)

我正在尝试通过 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))但这似乎也没有解决问题。

4

1 回答 1

2
xmlhttp.onreadystatechange = function(){
        if(xmlhttp.readyState == 4){
            xmlDoc=xmlhttp.responseXML;
            var foo = xmlDoc.getElementsByClassName("gridCellAlt");
        }
    }
于 2012-02-08T16:00:40.403 回答