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

首頁 > 編程 > JavaScript > 正文

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

2019-11-20 14:02:30
字體:
來源:轉載
供稿:網友

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

function $findChilds(parentNode, text) { //如果不傳入父節點的話,默認為body if(parentNode == undefined) parentNode = document.body; var childNodes = parentNode.childNodes; var results = []; //子節點大于零才循環 if(childNodes.length > 0) { var length = childNodes.length; //循環查找符合text的節點 for(var i=0;i<length;++i) { //三種情況,className,id, tagName switch(text.substr(0, 1)) { case '.': //這兩種:parentNode.getElementsByClassName,parentNode.all //都是后來加上的,如果瀏覽器這兩種方法都不支持,那就只能暴力遞歸了 if(parentNode.getElementsByClassName) return parentNode.getElementsByClassName(text.substr(1)); else if(parentNode.all) { var finded = []; var jlength = parentNode.all.length; for(var j=0;j<jlength;++j) if(parentNode.all[j].className == text.substr(1)) finded.push(parentNode.all[j]); return finded; } //以上兩種方法都不支持,直接判斷 if(childNodes[i].className == text.substr(1)) results.push(childNodes[i]); break; case '#': return [document.getElementById(text.substr(1))]; default: return parentNode.getElementsByTagName(text); } //判斷完后,把當前子元素的子元素傳入$findChilds進行遞歸查找,返回的結果直接和現在的結果合并 results = results.concat($findChilds(childNodes[i], text)); } } return results; } String.prototype.vtrim = function() { return this.replace(/^/s+|/s+$/g, ''); } function $g(text) { //按照空格分割參數 var values = text.vtrim().split(" "); var length = values.length; //如果只有一個選擇參數的話,就直接調用dom方法返回結果。 if(length == 1) switch(values[0].substr(0, 1)) { case "#": return document.getElementById(values[0].substr(1)); case ".": if(document.getElementsByClassName) return document.getElementsByClassName(values[0].substr(1)); default: return document.getElementsByTagName(values[0]); } //每次迭代都會產生許多符合參數的結果節點,這里結果節點的名稱為parentNodes,第一次循環默認為body var parentNodes = [document.body]; //外層循環為迭代每個傳入的參數 for(var i = 0; i < length; ++i) { var jlength = parentNodes.length; var results = []; //這里如果values的長度為零的話, //就說明是多出來的空格, //例如:$g(" .content");這種情況不執行代碼直接跳入下一循環 var tmpValue = values[i].vtrim(); if(tmpValue.length <= 0) continue; //內層循環為迭代每個結果節點, //在結果節點中查找符合選擇條件的結果。當然第一次為body for(var j=0;j<jlength;++j) { //$findChilds就是上邊的那個函數,就是選擇某個節點的子節點的 var result = $findChilds(parentNodes[j], values[i].vtrim()); var rlength = result.length; //因為返回的有時候是html容器,無法直接和數組concat所以倒入數組,這里有優化空間,但暫不考慮性能先這么做 for (var k = 0; k < rlength; ++k) results.push(result[k]); } //沒有結果,立即返回undefined if(results == undefined || results.length <= 0) return undefined; //最后一次循環就直接返回結果數組,但是如果最后一個選擇條件是選擇id的話,那就不返回數組直接返回dom對象了 if (i == length - 1) { if (values[i].substr(0, 1) == "#") return results[0]; return results; } parentNodes = results; } }

經過在ff ie6下的測試 單純的選擇id比jquery要快很多,
其他的部分選擇模式我測試的少數比jquery要快。
當然測試不可能全面,還可能會有bug,而且不支持類似于.content:first-child這樣的偽類選擇。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
成人激情在线观看| 成人动漫网站在线观看| 日韩av在线影视| 亚洲成成品网站| 亚洲天堂精品在线| 久久久999国产精品| 国产精品久久久久久久电影| 在线视频欧美日韩精品| 日韩精品免费在线观看| 亚洲第一区中文字幕| 欧美乱人伦中文字幕在线| 91色精品视频在线| 欧美日韩中文在线观看| 日韩av一区在线| 国模吧一区二区三区| 日本欧美在线视频| 日韩中文在线不卡| 亚洲精品欧美一区二区三区| 97在线免费观看视频| 亚洲美腿欧美激情另类| 亚洲成人av在线| 日韩精品在线免费观看视频| 美女精品视频一区| 欧美性猛交丰臀xxxxx网站| 中文字幕国产亚洲2019| 国产一区二区美女视频| 欧美一级视频免费在线观看| 日韩欧美在线视频免费观看| 亚洲激情视频在线播放| 国语自产偷拍精品视频偷| 97视频在线观看播放| 国产在线高清精品| 亚洲国产成人精品电影| 国产97色在线|日韩| 亚洲国产成人在线播放| 2020国产精品视频| 性欧美亚洲xxxx乳在线观看| 成人午夜两性视频| 性欧美xxxx视频在线观看| 中文在线资源观看视频网站免费不卡| 啪一啪鲁一鲁2019在线视频| 亚洲国模精品一区| 热99精品只有里视频精品| 久久精品青青大伊人av| 亚洲精品日韩丝袜精品| 亚洲欧美国产精品专区久久| 日韩高清人体午夜| 久久99精品视频一区97| 热久久这里只有精品| 国产精品高潮呻吟久久av野狼| 岛国av一区二区在线在线观看| 欧美午夜www高清视频| 91精品国产乱码久久久久久久久| 在线看日韩欧美| 欧美另类极品videosbestfree| 日韩美女av在线| 国产精品一区二区三| 亚洲在线视频观看| 日本欧美精品在线| 精品久久久久久亚洲精品| 777国产偷窥盗摄精品视频| 国产精品久久久久久久久粉嫩av| 国产精品白嫩美女在线观看| 91成人国产在线观看| 欧美在线视频免费观看| 久青草国产97香蕉在线视频| 中文字幕日韩精品在线| 欧美香蕉大胸在线视频观看| 国产精品三级网站| 亚洲精品美女网站| 欧美精品在线网站| 国产精品中文字幕在线观看| 色综合五月天导航| 日韩欧美国产骚| 欧美成人在线影院| 久久久噜噜噜久久中文字免| 国产成人精品免高潮在线观看| 国内精品久久久久久久久| 日本国产高清不卡| 亚洲国产毛片完整版| 国产欧美一区二区白浆黑人| 亚洲欧美自拍一区| 色与欲影视天天看综合网| 久久91精品国产| 激情成人中文字幕| 色噜噜狠狠狠综合曰曰曰| 亚洲精品福利视频| 欧美视频精品一区| 国产91精品青草社区| 国产在线观看精品| 亚洲www永久成人夜色| 亚洲美女又黄又爽在线观看| 国产精品丝袜久久久久久不卡| 久久久91精品国产一区不卡| 国产91精品久| 国产精品免费一区二区三区都可以| 国产精品私拍pans大尺度在线| 国产一区二区黄| 怡红院精品视频| 午夜精品视频网站| 欧美有码在线视频| 91精品视频一区| 亚洲欧洲免费视频| 欧美黑人一级爽快片淫片高清| 精品国产区一区二区三区在线观看| 97国产一区二区精品久久呦| 国产偷亚洲偷欧美偷精品| 97精品国产97久久久久久免费| 欧美亚洲另类视频| 久久天堂av综合合色| 久久影视三级福利片| 91网在线免费观看| 人妖精品videosex性欧美| 九九久久久久99精品| 日韩美女视频在线观看| 国产日本欧美视频| 亚洲欧美日韩中文在线| 久久久久久久97| 欧美性猛xxx| 欧美伊久线香蕉线新在线| 久久精品亚洲国产| 国产免费一区二区三区在线能观看| 欧美裸体xxxxx| 欧美在线亚洲在线| 欧美日韩精品在线观看| 日韩精品视频在线播放| 欧美性猛交xxxxx免费看| 国产精品高清免费在线观看| 欧美色另类天堂2015| 91人成网站www| 在线观看国产欧美| 亚洲精品久久久久中文字幕二区| 亚洲欧美国产视频| 国内久久久精品| 一夜七次郎国产精品亚洲| 国产精品极品美女粉嫩高清在线| 亚洲高清色综合| 激情懂色av一区av二区av| 欧洲成人午夜免费大片| 久久久久久国产精品三级玉女聊斋| 精品久久久av| 久久久亚洲影院| 国产欧美中文字幕| 91精品久久久久久久| 国产成人亚洲综合91| 日韩av中文字幕在线| 一区二区三区视频观看| 久久人人爽人人爽人人片亚洲| 日韩一二三在线视频播| 国产日韩精品电影| 91中文精品字幕在线视频| 在线观看欧美日韩| 亚洲精品狠狠操| 亚洲精品国产精品国自产在线| 日本一本a高清免费不卡| 自拍偷拍亚洲精品| 日韩av不卡在线| 亚洲网站视频福利| 自拍偷拍亚洲在线| 91色视频在线观看| 亚洲在线视频观看| 精品动漫一区二区| 欧美国产一区二区三区| 久久精品国产一区二区电影|