我是初学者,如果有什么不明白的地方我很抱歉:)
我正在尝试通过 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))
但这似乎也没有解决问题。