亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 語言 > JavaScript > 正文

原生的html元素選擇器類似jquery選擇器

2024-05-06 16:09:40
字體:
來源:轉載
供稿:網友
做前端,需要選擇元素,下面是實現代碼,一個原生的html元素選擇器類似jquery選擇器,很棒,很實用
 
 

做前端,需要選擇元素,雖說有jquery和各大js庫已經幫我造好了輪子,但我想試試自己實現一個,正好項目也不忙,正好加入自己的js文件中,下面是實現代碼。用$g(“#content .op”)這種格式就可以調用,和jquery $()的參數一樣:

 

  1. function $findChilds(parentNode, text)  
  2. {  
  3. //如果不傳入父節點的話,默認為body  
  4. if(parentNode == undefined)  
  5. parentNode = document.body;  
  6. var childNodes = parentNode.childNodes;  
  7. var results = [];  
  8. //子節點大于零才循環  
  9. if(childNodes.length > 0)  
  10. {  
  11. var length = childNodes.length;  
  12. //循環查找符合text的節點  
  13. for(var i=0;i<length;++i)  
  14. {  
  15. //三種情況,className,id, tagName  
  16. switch(text.substr(0, 1))  
  17. {  
  18. case '.':  
  19. //這兩種:parentNode.getElementsByClassName,parentNode.all  
  20. //都是后來加上的,如果瀏覽器這兩種方法都不支持,那就只能暴力遞歸了  
  21. if(parentNode.getElementsByClassName)  
  22. return parentNode.getElementsByClassName(text.substr(1));  
  23. else if(parentNode.all)  
  24. {  
  25. var finded = [];  
  26. var jlength = parentNode.all.length;  
  27. for(var j=0;j<jlength;++j)  
  28. if(parentNode.all[j].className == text.substr(1))  
  29. finded.push(parentNode.all[j]);  
  30. return finded;  
  31. }  
  32. //以上兩種方法都不支持,直接判斷  
  33. if(childNodes[i].className == text.substr(1))  
  34. results.push(childNodes[i]);  
  35. break;  
  36. case '#':  
  37. return [document.getElementById(text.substr(1))];  
  38. default:  
  39. return parentNode.getElementsByTagName(text);  
  40. }  
  41. //判斷完后,把當前子元素的子元素傳入$findChilds進行遞歸查找,返回的結果直接和現在的結果合并  
  42. results = results.concat($findChilds(childNodes[i], text));  
  43. }  
  44. }  
  45. return results;  
  46. }  
  47.  
  48. String.prototype.vtrim = function() {  
  49. return this.replace(/^/s+|/s+$/g, '');  
  50. }  
  51.  
  52. function $g(text)  
  53. {  
  54. //按照空格分割參數  
  55. var values = text.vtrim().split(" ");  
  56. var length = values.length;  
  57. //如果只有一個選擇參數的話,就直接調用dom方法返回結果。  
  58. if(length == 1)  
  59. switch(values[0].substr(0, 1))  
  60. {  
  61. case "#":  
  62. return document.getElementById(values[0].substr(1));  
  63. case ".":  
  64. if(document.getElementsByClassName)  
  65. return document.getElementsByClassName(values[0].substr(1));  
  66. default:  
  67. return document.getElementsByTagName(values[0]);  
  68. }  
  69. //每次迭代都會產生許多符合參數的結果節點,這里結果節點的名稱為parentNodes,第一次循環默認為body  
  70. var parentNodes = [document.body];  
  71. //外層循環為迭代每個傳入的參數  
  72. for(var i = 0; i < length; ++i)  
  73. {  
  74. var jlength = parentNodes.length;  
  75. var results = [];  
  76. //這里如果values的長度為零的話,  
  77. //就說明是多出來的空格,  
  78. //例如:$g(" .content");這種情況不執行代碼直接跳入下一循環  
  79. var tmpValue = values[i].vtrim();  
  80. if(tmpValue.length <= 0)  
  81. continue;  
  82. //內層循環為迭代每個結果節點,  
  83. //在結果節點中查找符合選擇條件的結果。當然第一次為body  
  84. for(var j=0;j<jlength;++j)  
  85. {  
  86. //$findChilds就是上邊的那個函數,就是選擇某個節點的子節點的  
  87. var result = $findChilds(parentNodes[j], values[i].vtrim());  
  88. var rlength = result.length;  
  89. //因為返回的有時候是html容器,無法直接和數組concat所以倒入數組,這里有優化空間,但暫不考慮性能先這么做  
  90. for (var k = 0; k < rlength; ++k)  
  91. results.push(result[k]);  
  92. }  
  93. //沒有結果,立即返回undefined  
  94. if(results == undefined || results.length <= 0)  
  95. return undefined;  
  96. //最后一次循環就直接返回結果數組,但是如果最后一個選擇條件是選擇id的話,那就不返回數組直接返回dom對象了  
  97. if (i == length - 1)  
  98. {  
  99. if (values[i].substr(0, 1) == "#")  
  100. return results[0];  
  101. return results;  
  102. }  
  103. parentNodes = results;  
  104. }  
?
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩精品福利在线| 尤物精品国产第一福利三区| 国产精品第3页| 国产精品久久一区| 97香蕉超级碰碰久久免费软件| 成人久久一区二区| 日韩精品视频在线观看网址| 国产精品久久久久久久久| 欧美成人免费一级人片100| 国产精品久久久久av免费| 亚洲人成电影网| 欧美另类极品videosbest最新版本| 国产ts人妖一区二区三区| 国产精品亚洲激情| 日本久久久久久久久久久| 亚洲人成电影网站色…| 成人激情视频在线| 国产精品美腿一区在线看| 久久精品成人动漫| 国产精品视频免费观看www| 粗暴蹂躏中文一区二区三区| 久久精品99久久久久久久久| 精品国产欧美一区二区三区成人| 尤物yw午夜国产精品视频| 欧美激情精品久久久| 国产精品一区二区电影| 国产精品视频网址| 欧美一级成年大片在线观看| 亚洲精品之草原avav久久| 奇米4444一区二区三区| 精品国产乱码久久久久久婷婷| 日韩中文字幕在线观看| 国产一区二区久久精品| 成人xxxx视频| 富二代精品短视频| 国产精品视频播放| 亚洲精品狠狠操| 国产日韩一区在线| 91欧美精品成人综合在线观看| 亚洲人精品午夜在线观看| 在线观看国产精品日韩av| 91精品国产自产在线老师啪| 欧美激情性做爰免费视频| 欧美一级视频一区二区| 国产激情视频一区| 日本中文字幕久久看| 不卡av电影在线观看| 国产精品免费视频xxxx| 亚洲最大在线视频| 亚洲一区国产精品| 国产精品视频xxxx| 久久久精品亚洲| 亚洲高清久久久久久| 日韩激情在线视频| 国产精品久久久| 91老司机精品视频| 国产精品免费视频xxxx| 国产丝袜一区二区三区| 日韩经典中文字幕| 热门国产精品亚洲第一区在线| 91久久在线观看| 亚洲国产天堂久久综合| 欧美日本在线视频中文字字幕| 欧美亚洲另类在线| 亚洲欧美在线第一页| 91网站免费观看| 日韩亚洲欧美成人| 欧美激情国产日韩精品一区18| 91免费福利视频| 在线国产精品视频| 8x海外华人永久免费日韩内陆视频| 精品国产一区av| 91欧美日韩一区| 97国产精品免费视频| 亚洲成人久久一区| 国产精品jizz在线观看麻豆| 国产视频欧美视频| 亚洲第一天堂av| 久久色精品视频| 久久这里有精品视频| 国产精品入口夜色视频大尺度| 欧美激情影音先锋| 色婷婷亚洲mv天堂mv在影片| 欧美日韩成人在线观看| 国产精品国产亚洲伊人久久| 亚洲欧美国产精品专区久久| 久久精品久久久久久| 欧美极度另类性三渗透| 亚洲一区二区三区毛片| 国产精品亚洲一区二区三区| 精品女厕一区二区三区| 亚洲天堂av高清| 日韩av手机在线观看| 国产成人黄色av| 欧美中文在线观看| 日韩在线视频中文字幕| 久久精品99无色码中文字幕| 久久精品久久久久电影| 国产精品丝袜久久久久久不卡| 久久视频这里只有精品| 久久视频免费观看| 亚洲韩国欧洲国产日产av| 亚洲第一区在线观看| 久久激情视频久久| 91po在线观看91精品国产性色| 亚洲免费电影一区| 久久亚洲综合国产精品99麻豆精品福利| 国产精品视频一区二区高潮| 欧美日韩免费网站| 精品人伦一区二区三区蜜桃免费| 亚洲一区二区三区在线免费观看| 日韩美女av在线| 国产成人高潮免费观看精品| 国产精品情侣自拍| 亚洲精品网站在线播放gif| 国产激情综合五月久久| 9.1国产丝袜在线观看| 国产亚洲日本欧美韩国| 欧美性理论片在线观看片免费| 两个人的视频www国产精品| 亚洲国产女人aaa毛片在线| 亚洲精品一区中文| 日韩电影中文字幕在线观看| 欧美激情一区二区三级高清视频| 久久久精品网站| 97久久超碰福利国产精品…| 97精品国产aⅴ7777| 成人淫片在线看| 成人免费淫片视频软件| 51午夜精品视频| 91成品人片a无限观看| 亚洲美女av网站| 国产精品久久中文| 97涩涩爰在线观看亚洲| 日韩av在线免费观看一区| 亚洲自拍中文字幕| 精品国产网站地址| 日韩中文字幕第一页| 亚洲片在线观看| 久久99国产精品久久久久久久久| 久久成人精品一区二区三区| 日韩av网址在线观看| 久久精品国产99国产精品澳门| 国产成人黄色av| 深夜成人在线观看| 2019中文在线观看| 黄网动漫久久久| 日韩欧美国产高清91| 亚洲性夜色噜噜噜7777| 日韩欧美一区二区在线| 在线亚洲国产精品网| 国产精品丝袜久久久久久高清| 欧美大荫蒂xxx| 久久激情视频久久| 中文字幕日韩精品在线观看| 日韩中文理论片| 久久69精品久久久久久久电影好| 亚洲午夜性刺激影院| 538国产精品视频一区二区| 日韩电影大片中文字幕| 夜夜嗨av一区二区三区免费区| 亚洲最大的免费| 国产精品第七十二页| 91老司机在线|