js 實現對jq選擇器 id class tag *選擇器的模仿封裝
阿新 • • 發佈:2018-12-03
簡單弄了一下,大神勿噴,僅供自己練習
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<style type="text/css">
#box{
width: 500px;
height: 200px;
border: 1px solid #ee5600 ;
}
</style>
</head>
<body>
<div id="box">
設定背景顏色0
</div>
<span>
設定背景顏色1
</span>
<p class="a">
設定背景顏色2
</p>
</body>
<script type ="text/javascript">
var $ = function(selectdeom ,results){
results = results || [] ;
//匹配id class *
var requickExpr = /^(?:#([\w-]+)|\.([\w-]+)|([\w]+)|(\*))$/,
m = requickExpr.exec(selectdeom);
if(m){
if(m[1]){
results = getid(m[1 ],results );
}else if(m[2]){
results = getclass(m[2],results);
}else{
results = gettag(m[3] || "*",results);
}
}
return results;
}
var getid = function(id,results){
results = results || [] ;
results.push(document.getElementById(id));
return results;
}
var getclass = function(className,results){
results = results || [] ;
results.push.apply(results,document.getElementsByClassName(className));
return results;
}
var gettag = function(tag,results){
results = results || [] ; results.push.apply(results,document.getElementsByTagName(tag));
return results;
}
var each = function(arr,fn){
for(var i=0;i<arr.length;i++){
//將this指向在呼叫的函式上
if(fn.call(arr[i],i,arr[i]) === false){
break;
}
}
}
each($("#box"),function(){
this.style.background = "red";
});
each($("span"),function(){
this.style.background = "green";
});
each($(".a"),function(){
this.style.fontSize = 20+"px";
});
// each(get("*"),function(){
// this.style.background = "#f5f5f5";
// });
</script>
</html>