var stringToDom= function(text) {
var doc;
if(window.ActiveXObject) {
doc = new ActiveXObject("MSXML2.DOMDocument"); >} else {
doc = (new DOMParser()).parseFromString(text,"text/xml");
}
return doc;
var xmlDoc=stringToDom(" a
b")、
c、
d1=new Date();
for(var i=0;ic=xmlDoc.getElementsByTagName("a");
document.write(" getElementsByTagName: " ,new Date()-d1);
d1=new Date();
try{
for(var i=0;ic=xmlDoc .selectNodes( "a");
}
document.write("
selectNodes: ",new Date()-d1); ("< ;br/>error:" ex)}
IE でノードを選択する方がはるかに高速です。
FF でも実行できますが、そのような方法はありません。グーグルで調べたところ、XPathEvaluatorを使用したメソッドが見つかりました。実装するには、次のような具体的な実装がありますが、効率は理想的ではありません:
コードをコピーします
XMLDocument.prototype.selectNodes = function(sXPath) {
oResult = oEvaluator.evaluate(sXPath, this, null, XPathResult.ORDERED_NODE_ITERATOR_TYPE, null);
var aNodes = []
if (oResult != null) {
var oElement = oResult.iterateNext() ;
while (oElement) {
aNodes[aNodes.length]=oElement;
oElement = oResult.iterateNext();
}
return aNodes;
}
})()
}
evaluate(xpathExpression, contextNode, namespaceResolver, resultType, result); XPath 式およびその他の指定されたパラメータに基づいて XPathResult を返します。
xpathExpression は、クエリのコンテキスト ノードを指定します。 org/TR/xpath XPath 仕様)。
namespaceResolver は、任意の名前空間プレフィックスを渡し、そのプレフィックスに関連付けられた名前空間 URI を表す文字列を返す関数になります。 XPath 自体内のプレフィックスを解決して、ドキュメントと照合できるようにするために使用されます。null は、HTML ドキュメントの場合、または名前空間プレフィックスが使用されていない場合に一般的です。
resultType は、返される結果 XPathResult のタイプに対応する整数です。 XPathResult コンストラクターの名前付き定数プロパティ (XPathResult.ANY_TYPE など) を使用します。これは、0 から 9 までの整数に対応します。
result は、結果に使用する既存の XPathResult であり、最も一般的なのは新しい XPathResult です。 XPathResult
完全なテスト ページ:
コードをコピー
コードは次のとおりです:
selectNodes&getElementsByTagName