(function(){var jq = function(selector){//selector = "#apple";return new jq.fn.init(selector);}jq.fn = {init:function(selector){//選擇器設置: #id 和 tag標簽 選擇器兩種if(selector.substr(0,1)==='#'){//判斷是否有"#號"//去除selector的“#號”var flag = selector.substr(1,selector.length-1);var elem = document.getElementById(flag);//this代表jquery實例化出來的對象//jquery對象 與 dom對象 做合并this.length = 1;this[0] = elem;}else{var elems = document.getElementsByTagName(selector);//遍歷elems,獲得每個dom對象分別存儲this里邊for(var i=0; i<elems.length; i++){this[i] = elems[i];}this.length = elems.length;}},css:function(k,v){//this代表調用該方法的當前對象(jquery對象)//this[0].style[k] = v;//遍歷當前的jquery對象,為每個具體dom對象設置css樣式for(var i=0; i<this.length; i++){this[i].style[k] = v;}},attr:function(k,v){for(var i=0; i<this.length; i++){this[i].setAttribute(k,v);}},each:function(callback){//遍歷jquery對象,使得每個dom對象都執行一次callbackfor(var i=0; i<this.length; i++){//this[i]//callback();//callback.call(函數內部this的指引,函數形參,形參,形參);//callback函數隨著for循環執行了多次,//每次執行的時候內部this都指向“this[i]的dom對象”callback.call(this[i],i,this[i]);}}}//設置init()構造函數通過原型prototype方式繼承jq.fn()//這樣new init()的對象不僅可以方法init內部成員,還可以方法fn的成員jq.fn.init.prototype = jq.fn;//給jquery聲明外部使用接口變量window.$ = jq; })();
?