Я очень новичок, поэтому прошу прощения, если что-то не имеет смысла:)
Я пытаюсь найти 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))
, но, похоже, это тоже не решает проблему.