2

超初心者なので分かりにくかったらすみませんm(_ _)m

スクリプトが含まれているドキュメントを検索しているときにのみ機能するように見えるカスタム関数を使用して、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てうまくいった場合。

getElementsByClassNameDOM ノード内を正しく検索していないと思い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 に答える