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

getElementsByTagName vs selectNodes效率 及兼容的selectNodes實現(xiàn)

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

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來實現(xiàn),下面是具體實現(xiàn),不過效率就不太理想了:
復(fù)制代碼 代碼如下:

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
完整的測試頁面:
復(fù)制代碼 代碼如下:

<!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>

相關(guān)文章

  • JSP跨iframe如何傳遞參數(shù)實現(xiàn)代碼

    JSP跨iframe如何傳遞參數(shù)實現(xiàn)代碼

    表單與操作頁面分離,按鈕按下,click 或者onclick事件觸發(fā),傳遞一個唯一性的參數(shù)至子頁面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操作網(wǎng)頁的接口,全稱為文檔對象模型(Document Object Model)。本文將主要說明DOM節(jié)點類型,有需要的可以參考借鑒。
    2016-08-08
  • JavaScript標準對象_動力節(jié)點Java學(xué)院整理

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

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

    js閉包的9個使用場景

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

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

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

    next.js初始化參數(shù)設(shè)置getServerSideProps應(yīng)用學(xué)習(xí)

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

    小程序scroll-view組件實現(xiàn)滾動的示例代碼

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

    JavaScript獲取文本框內(nèi)選中文本的方法

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

    bootstrap組件之導(dǎo)航組件使用方法

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

最新評論

黄大仙区| 土默特右旗| 西林县| 永定县| 汶川县| 岑巩县| 彭水| 贞丰县| 绩溪县| 康平县| 大同市| 固安县| 云林县| 千阳县| 珠海市| 高淳县| 丁青县| 庆城县| 南丰县| 永川市| 洪江市| 新昌县| 舟曲县| 武宣县| 沙河市| 新巴尔虎左旗| 丁青县| 凉城县| 兴城市| 咸丰县| 独山县| 黑河市| 乐山市| 美姑县| 台州市| 淳安县| 临朐县| 招远市| 页游| 沧源| 靖远县|