自從標準瀏覽器增長了querySelector這個類JQ的方法後,選擇一個元素變成了一件so easy的事情。可是某些瀏覽器仍是不支持。使用jq庫又有點太大,其實能夠本身動手實現這個選擇器,具體代碼以下html
function getByClass(sele,parent){ var parent = parent||document; if(parent.querySelectorAll){ return parent.querySelectorAll(sele); }else if(parent.getElementsByClassName){ return parent.getElementsByClassName(sele.slice(1)); }else{ var tags = parent.getElementsByTagName("*"); var targets=[]; for(var i=0;i<tags.length;i++){ if(tags[i].className.indexOf(sele.slice(1))>-1){ targets.push(tags[i]); } } return targets; } } function find(sele,parent){ var parent=parent||document; // console.log("sele:",sele,";parent:",parent); var selectorArr = sele.split(/\s+/); var selector = selectorArr.shift(); // console.log("selector:",selector); var targets=[]; if(selector.indexOf("#")>-1){ targets.push(document.getElementById(selector.slice(1))); }else if(selector.indexOf(".")>-1){ targets=getByClass(selector,parent); }else{ targets = parent.getElementsByTagName(selector); } var result=[]; if(selectorArr.length>0){ for(var i=0;i<targets.length;i++){ var tempResult=Array.prototype.slice.call(find(selectorArr.join(" "),targets[i]),0); result=result.concat(tempResult); } }else{ return targets; } return result; }
原理是將網友傳入的參數分解,前面的經過迭代選擇不斷的更新父元素,最後一個選擇器就是在父元素的子元素中選擇匹配的元素。瀏覽器
案例網址:http://imgad0.pconline.com.cn/ivy/image/20172/21/14876672047970.htmlspa