最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

getElementsByTagName vs selectNodes效率 及兼容的selectNodes實現

 更新時間:2010年02月26日 14:35:37   作者:  
天在csdn上看到有人問 getElementsByTagName 和 selectNodes誰更快 ,這個還真沒研究過。
于是就測試了下:
復制代碼 代碼如下:

var stringToDom=function(text) {
var doc;
if(window.ActiveXObject) {
doc = new ActiveXObject("MSXML2.DOMDocument");
doc.loadXML(text).documentElement;
} else {
doc = (new DOMParser()).parseFromString(text,"text/xml");
}
return doc;
}
var xmlDoc=stringToDom("<body><a href='a'>a</a><a href='b'>b</a></body>"),
c,
d1=new Date();
for(var i=0;i<100000;i++){
c=xmlDoc.getElementsByTagName("a");
}
document.write("getElementsByTagName: ",new Date()-d1);
d1=new Date();
try{
for(var i=0;i<100000;i++){
c=xmlDoc.selectNodes("a");
}
document.write("<br/>selectNodes: ",new Date()-d1);
}catch(ex){document.write("<br/>error:"+ex)}

在IE下selectNodes還是快多了,
可以FF下卻沒有這個方法,google了下,找了方法,使用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);
Returns an XPathResult based on an XPath expression and other given parameters.
xpathExpression is a string representing the XPath to be evaluated.
contextNode specifies the context node for the query (see the [http://www.w3.org/TR/xpath XPath specification). It's common to pass document as the context node.
namespaceResolver is a function that will be passed any namespace prefixes and should return a string representing the namespace URI associated with that prefix. It will be used to resolve prefixes within the XPath itself, so that they can be matched with the document. null is common for HTML documents or when no namespace prefixes are used.
resultType is an integer that corresponds to the type of result XPathResult to return. Use named constant properties, such as XPathResult.ANY_TYPE, of the XPathResult constructor, which correspond to integers from 0 to 9.
result is an existing XPathResult to use for the results. null is the most common and will create a new XPathResult
完整的測試頁面:
復制代碼 代碼如下:

<!doctype HTML>
<html>
<head>
<title>selectNodes&getElementsByTagName</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="author" content="sohighthesky"/>
<meta name="Keywords" content="selectNodes vs getElementsByTagName"/>
</head>
<body>
</body>
<script type="text/javascript">
/*
*author:sohighthesky -- http://www.cnblogs.com/sohighthesky
*content: selectNodes vs getElementsByTagName
*/
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;
}
XMLDocument.prototype.selectSingleNode = function(sXPath) {
oResult = oEvaluator.evaluate(sXPath, this, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null);
// FIRST_ORDERED_NODE_TYPE returns the first match to the xpath.
return oResult==null?null:oResult.singleNodeValue;
}
})()
}
var stringToDom=function(text) {
var doc;
if(window.ActiveXObject) {
doc = new ActiveXObject("MSXML2.DOMDocument");
doc.loadXML(text).documentElement;
} else {
doc = (new DOMParser()).parseFromString(text,"text/xml");
}
return doc;
}
var xmlDoc=stringToDom("<body><a href='a'>a</a><a href='b'>b</a></body>"),
c,
d1=new Date();
for(var i=0;i<100000;i++){
c=xmlDoc.getElementsByTagName("a");
}
document.write("getElementsByTagName: ",new Date()-d1);
d1=new Date();
try{
for(var i=0;i<100000;i++){
c=xmlDoc.selectNodes("a");
}
document.write("<br/>selectNodes: ",new Date()-d1);
}catch(ex){document.write("<br/>error:"+ex)}
/*
var n=xmlDoc.selectSingleNode("body/a"),doc=xmlDoc.selectSingleNode("body");//alert(n.childNodes[0].nodeValue)
for(var i=0;i<10000;i++){
doc.appendChild(n.cloneNode(true))
}
d1=new Date();
c=xmlDoc.getElementsByTagName("a");
document.write("<br/>getElementsByTagName: ",new Date()-d1);
d1=new Date();
c=xmlDoc.selectNodes("a");
document.write("<br/>selectNodes: ",new Date()-d1);
*/
</script>
</html>

相關文章

  • JSP跨iframe如何傳遞參數實現代碼

    JSP跨iframe如何傳遞參數實現代碼

    表單與操作頁面分離,按鈕按下,click 或者onclick事件觸發(fā),傳遞一個唯一性的參數至子頁面JSP,感興趣的朋友可以了解下
    2013-09-09
  • javascript基本包裝類型介紹

    javascript基本包裝類型介紹

    這篇文章主要介紹了javascript的基本包裝類型,JS為了便于操作基本類型,提供了3個特殊的引用類型:Boolean/Number和String,需要的朋友可以參考下
    2015-04-04
  • 淺談Javascript中的12種DOM節(jié)點類型

    淺談Javascript中的12種DOM節(jié)點類型

    DOM是javascript操作網頁的接口,全稱為文檔對象模型(Document Object Model)。本文將主要說明DOM節(jié)點類型,有需要的可以參考借鑒。
    2016-08-08
  • JavaScript標準對象_動力節(jié)點Java學院整理

    JavaScript標準對象_動力節(jié)點Java學院整理

    這篇文章主要為大家詳細介紹了JavaScript標準對象的相關資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • js閉包的9個使用場景

    js閉包的9個使用場景

    這篇文章主要介紹了js 閉包的9個使用場景,幫助大家更好的理解和學習JavaScript 閉包的使用,感興趣的朋友可以了解下
    2020-12-12
  • 小程序最新獲取用戶昵稱和頭像的方法總結

    小程序最新獲取用戶昵稱和頭像的方法總結

    這篇文章主要介紹了小程序最新獲取用戶昵稱和頭像的方法總結,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-09-09
  • next.js初始化參數設置getServerSideProps應用學習

    next.js初始化參數設置getServerSideProps應用學習

    這篇文章主要為大家介紹了next.js初始化參數設置getServerSideProps的應用示例學習,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-10-10
  • 小程序scroll-view組件實現滾動的示例代碼

    小程序scroll-view組件實現滾動的示例代碼

    這篇文章主要介紹了小程序scroll-view組件實現滾動的示例代碼,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-09-09
  • JavaScript獲取文本框內選中文本的方法

    JavaScript獲取文本框內選中文本的方法

    這篇文章主要介紹了JavaScript獲取文本框內選中文本的方法,實例分析了javascript通過onclick獲取文本框選中文本的技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-02-02
  • bootstrap組件之導航組件使用方法

    bootstrap組件之導航組件使用方法

    Bootstrap 中的導航組件都依賴同一個 .nav 類和ul,狀態(tài)類也是共用的。改變修飾類可以改變樣式。接下來通過本文給大家介紹bootstrap 導航組件使用方法,一起看看吧
    2017-01-01

最新評論

辽宁省| 西乌珠穆沁旗| 垦利县| 扶绥县| 马关县| 迁西县| 锦州市| 舟曲县| 凌源市| 鹤岗市| 高淳县| 鹤岗市| 泸水县| 双鸭山市| 吕梁市| 皮山县| 张家界市| 东明县| 合作市| 平山县| 武汉市| 凤庆县| 修武县| 雷波县| 略阳县| 苍南县| 永州市| 德格县| 乌兰察布市| 美姑县| 大方县| 乳源| 建德市| 高青县| 咸丰县| 绵阳市| 易门县| 尖扎县| 双牌县| 闽清县| 常熟市|