dQuery.extend({
//判断方法
isFunction : function(sel){
return typeof sel === "function";
},
//封装判断字符串和代码片段的方法
isString : function(str){
return typeof str === "string";
},
isHtml : function(str){
return str.charAt(0) == "<" &&
str.charAt(str.length-1) == ">" &&
str.length >=3
},
//封装判断对象 数组 window的方法
isObject : function(sel){
return typeof sel === "object"
},
isWindow : function (sel){
return sel === window;
},
isArray : function(sel){
if(dQuery.isObject(sel)&&
!dQuery.isWindow(sel)&&
"length" in sel){
return true;
}
return false;
},
//去除传入字符串的空格
trim : function (str){
if(!dQuery.isString(str)){
return str;
}
if(str.trim){
return str.trim();
}else{
return str.replace(/^\s+|\s+$/g,"")
}
},
//函数处理
ready : function(fn){
//判断DOM是否加载完毕
if(document.readyState == "complete"){
fn();
}
else if(document.addEventListener){ //高级浏览器
document.addEventListener("DOMContentLoaded",function(){
fn();
})
}
else{ //lowB浏览器
document.attachEvent("onreadystatechange",function(){
if(document.readyState == "complete"){
fn();
}
})
}
},
each:function(obj,fn){
//真数组
if(dQuery.isArray(obj)){
for(var i=0;i < obj.length;i++){
//fn(i,obj[i]); //回调函数
var res = fn.call(obj[i],i,obj[i]); //使this指向value
if(res === true){ //根据布尔值决定是否跳出循环
continue;
}else if(res === false){
break;
}
}
}
//伪数组
else if(dQuery.isObject(obj)){
for(var key in obj ){
//fn(key,obj[key]);
var res = fn.call(obj[key],key,obj[key]);
if(res === true){
continue;
}else if(res === false){
break;
}
}
}
},
map:function(obj,fn){
var res = []; //map中的返回值res
//是否是数组
if(dQuery.isArray(obj)){
for(var i=0;i < obj.length;i++){
var temp = fn(obj[i],i); //执行回调函数,结果赋值给temp
if(temp){ //jQuery中回调函数有值的时候,才执行此操作,否则结果为空,若不加此判断,就会是undefined
res.push(temp);
}
}
}
//是否是对象
else if(dQuery.isObject(obj)){
for(var key in obj ){
var temp = fn(obj[key],key);
if(temp){
res.push(temp);
}
}
}
return res;
},
//兼容获取元素属性的方法:
getStyle:function(dom,styleName){
if(window.getComputedStyle){
return window.getComputedStyle(dom)[styleName];
}else{
return dom.currentStyle[styleName]; //ie
}
},
//兼容添加事件:
addEvent:function(dom,name,callBack){
if(dom.addEventListener){
dom.addEventListener(name,callBack);
}else{
dom.attachEvent("on"+name,callBack);
}
}
})
手撸 jQuery源码:原型上的方法(完整版)
最新推荐文章于 2021-09-27 16:34:23 发布