Javascript объект / функция не работает при вызове DOM - PullRequest
2 голосов
/ 08 февраля 2012

Я очень новичок, поэтому прошу прощения, если что-то не имеет смысла:)

Я пытаюсь найти XML DOM по ClassName, используя пользовательскую функцию, которая, кажется, работает только тогда, когдаЯ ищу документ, в котором находится сценарий.

Это функция:

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"); и включаю информацию, к которой у меня есть доступ, на странице, где выполняется сценарий, но когда я пытаюсь использовать ее в DOM xmlDoc, она не работает.Подводя итог: единственный раз, когда скрипт не работает, это когда я использую xmlDoc (вместо документа) и getElementsbyClassName вместе.Если я использую document и getElementsByClassName, это нормально.Если я использую xmlDoc и получаю elementsByTagName, это нормально.

Я думаю, что getElementsByClassName не выполняет правильный поиск в узлах DOM, но даже если я поместил class="gridCellAlt" где-нибудь в корневой узел тестового DOM, он все равно не найдет его.Я попытался добавить больше информации за foo = xmlDoc.getElementsByClassName("gridCellAlt", (info here)), но, похоже, это тоже не решает проблему.

1 Ответ

2 голосов
/ 08 февраля 2012
xmlhttp.onreadystatechange = function(){
        if(xmlhttp.readyState == 4){
            xmlDoc=xmlhttp.responseXML;
            var foo = xmlDoc.getElementsByClassName("gridCellAlt");
        }
    }
...