4

document.getElementByIdMozillaのDOMParserメソッドを使用してXML文字列から解析されたDOMでメソッドがサポートされていますか?XMLファイルを読み取り、DOMパーサーを使用してXMLをDOM要素に変換し、IDで要素を取得しようとするMozilla拡張機能を作成しています。getElementsByTagNameメソッドは機能しますが、getElementByIdは機能しません。常にnullを返します。

function (xmlString) {
    var parser = new DOMParser();
    var doc = parser.parseFromString(xmlString, "text/xml"); 
    var aNodes = doc.getElementsByTagName("nodeTag");
    for(var i=0; i<aNodes.length; ++i) {
        var id = aNodes[i].getAttribute('id');
        var resultNode = doc.getElementById(id);
        alert(id);
        alert(resultNode);
    }
}

上記のコードを試してみました。alert(id)は適切なIDを返しますが、alert(resultNode)は毎回nullを返します。

4

2 に答える 2

8

いいえ、document.getElementById通常、任意のXMLドキュメントでは機能しません。

最近のブラウザ(Firefox 3.5以降など)では、document.querySelector代わりに次のものを使用できます。

var resultNode = doc.querySelector("[id=" + id + "]");
于 2010-09-08T12:06:00.257 に答える
2

getElementById()メソッドを実際に使用可能にするソリューションが必要で(そうする必要があります。はるかに高速で、より用途が広い)、DTDにアクセスできる場合は、次の行を追加します。

<!ATTLIST client id ID #IMPLIED >

<?xml version= \"1.0\"?>まだDTDを使用していない場合は、ステートメントの直後にこれをxmlドキュメントに追加してください。

<!DOCTYPE clients [ 
   <!ATTLIST client id ID #IMPLIED > 
]>

この例では、「clients」は私のxmlファイルのルートであり、「client」はIDを付加したい要素です。他のタイプの要素にIDを追加したい他の要素に対して、複数の「ATTLIST」ステートメントを追加できます。

これをサファリ、クローム、Firefoxでテストしました。完璧に動作します。

于 2013-02-05T00:15:26.703 に答える