ホームページ  >  記事  >  ウェブフロントエンド  >  getElementsByTagName と selectNodes の効率性と互換性のある selectNodes 実装_JavaScript スキル

getElementsByTagName と selectNodes の効率性と互換性のある selectNodes 実装_JavaScript スキル

WBOY
WBOYオリジナル
2016-05-16 18:33:531121ブラウズ

コードをコピーします コードは次のとおりです:

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(" ab")、
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を使用したメソッドが見つかりました。実装するには、次のような具体的な実装がありますが、効率は理想的ではありません:



コードをコピーします
コードは次のとおりです: if (!window.ActiveXObject) { (function(){ var oEvaluator=new XPathEvaluator(),oResult;
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









声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。