MyQuery

作者: 你拉风 | 来源:发表于2017-11-23 14:27 被阅读0次

    /*

       学完了JS OOP的课程,写了一个自己的迷你版的JQuery。

        以下就是代码咯!!

    */

    (function(){

    //构建变量保存window.

    var _$ = window.$;

    var _Query = window.Query;

    var Query = window.Query = window.$ = function(selector){

    return new Query.fn.init(selector);

    }

    //处理原型

    Query.fn = Query.prototype = {

    //给这个包添加一个初始化方法

    init : function(selector){

    //获取所有选择器指定的元素对象

    var eles = document.querySelectorAll(selector);

    //将所有元素添加到this中,形成对象型数组

    Array.prototype.push.apply(this,eles);

    //将this返回

    return this;

    },

    Query : "1.0.0",

    length : 0,

    size : function (){

    return this.length;

    }

    };

    //

    Query.fn.init.prototype = Query.fn;

    //实现继承,通过调用这个方法,可以不断的为Query添加功能

    //添加静态 //添加实例

    Query.exdent = Query.fn.exdent = function(){

    //参数是一个对象

    var o = (arguments[0] instanceof Object ? arguments[0] : {});

    //将对象的属性和属性值一个个动态添加到this中

    for(p in o){

    this[p] = o[p];

    }

    }

    //添加静态方法

    Query.exdent({

    //解决冲突

    noConflict: function( deep ) {

    window.$ = _$;

    if ( deep )

    window.jQuery = _Query;

    return jQuery;

    },

    //循环

    each : function(data, callback){

    for(d in data){

    try{

    callback(parseInt(d),data[d]);

    } catch(e){

    callback(d,data[d]);

    }

    }

    },

    //去空格

    trim: function( text ) {

    return (text || "").replace( /^\s+|\s+$/g, "" );

    },

    //异步

    ajax : function(){

    var o = arguments[0];

    if(!(o instanceof Object)){

    return;

    }

    var req;

    if (window.ActiveXObject)

    req = new ActiveXObject("Microsoft.XMLHTTP");

    else if (window.XMLHttpRequest)

    req = new XMLHttpRequest();

    if(!o.method)

    o.method='GET';

    if(!o.contentType && o.method.toUpperCase()=='POST')

    o.contentType = 'application/x-www-form-urlencoded';

    if (o.callback){

    req.onreadystatechange = function(){

    if(req.readyState==4&&req.status==200){

    var data=req.responseText;

    data = eval ("(" + data + ")");

    o.callback(data);

    }

    }

    }

    req.open(o.method,o.url);

    if (o.contentType)

    req.setRequestHeader('Content-Type',o.contentType);

    req.send(o.param);

    },

    //get异步

    get : function(url, param, callback){

    this.ajax({

    url : url + "?" + param,

    callback : callback,

    });

    },

    //post异步

    post : function(url, param, callback){

    this.ajax({

    url : url,

    callback : callback,

    param : param,

    method : "post"

    });

    }

    });

    //工具方法

    Query.fn.exdent({

    //获取元素

    get : function (num){

    if(!isNaN(num)){

    return this[num];

    }

    },

    //遍历元素

    each:function(callback){

    for(var i = 0 ;i< this.length; i++){

    callback(i,this[i]);

    }

    },

    //序列化表单

    serialize : function(){

    var ipts = this[0].elements;

    var params = '';

    for (var i = 0; i < ipts.length; i++) {

    var ipt = ipts[i];

    if (ipt.type=='text' ||

    ipt.type=='file' ||

    ipt.type=='password' ||

    ipt.type=='hidden' ||

    ipt.type=='textarea' ||

    ipt.type=='select-one' ||

    ipt.type=='radio' ||

    ipt.type=='checkbox'&&ipt.checked)

    {

    params+= ipt.name + '=' + encodeURI(ipt.value) + "&";

    }

    }

    if (params!='') {

    params = params.substring(0, params.length-1);

    }

    return params;

    }

    });

    //节点方法

    Query.fn.exdent({

    //追加

    append : function() {

    var h = arguments[0];

    this.each(function(index, ele){

    if(h != undefined)

    ele.innerHTML += h;

    });

    return this;

    },

    //移除

    remove : function(){

    this.each(function(index,ele){

    ele.parentNode.removeChild(ele);

    });

    },

    //文本

    text : function(){

    var t = arguments[0];

    if(t != undefined){

    this.each(function(index, ele){

    ele.innerText = t;

    });

    return this;

    }else{

    return this[0].innerText;

    }

    },

    //html

    html : function(){

    var h = arguments[0];

    if(h != undefined){

    this.each(function(index, ele){

    ele.innerHTML = h;

    });

    return this;

    }else{

    return this[0].innerHTML;

    }

    }

    });

    //元素样式方法

    Query.fn.exdent({

    //样式

    css : function (){

    var length = arguments.length;

    if(length == 1){

    if(arguments[0] instanceof Object){

    for(var p in arguments[0]){

    var o = arguments[0];

    this.each(function(index, ele){

    ele.style[p] = o[p];

    });

    }

    }else{

    return this[0].style[arguments[0]];

    }

    }else if(length == 2){

    var name = arguments[0];

    var value = arguments[1];

    this.each(function(index, ele){

    ele.style[name] = value;

    });

    }

    return this;

    },

    //属性

    prop : function(){

    var length = arguments.length;

    if(length == 1){

    if(arguments[0] instanceof Object){

    for(var p in arguments[0]){

    var o = arguments[0];

    this.each(function(index, ele){

    ele.setAttribute(p,o[p]);

    });

    }

    }else{

    return this[0].getAttribute(arguments[0]);

    }

    }else if(length == 2){

    var name = arguments[0];

    var value = arguments[1];

    this.each(function(index, ele){

    ele.setAttribute(name,value);

    });

    }

    return this;

    },

    //隐藏

    hide : function(){

    this.each(function(index, ele){

    ele.style.display = "none";

    });

    return this;

    },

    //显示

    show : function(){

    this.each(function(index, ele){

    ele.style.display = "block";

    });

    return this;

    }

    });

    //事件处理方法

    Query.fn.exdent({

    on : function(eventName, callback){

    var e = "on" + eventName;

    this.each(function(index, ele){

    ele[e] = callback;

    });

    }

    });

    //事件方法

    Query.fn.exdent({

    //鼠标经过

    mouseover : function(callback){

    this.on("mouseover",callback);

    },

    //鼠标移除

    mouseout : function(callback){

    this.on("mouseout",callback);

    },

    //鼠标按下

    mousedown : function(callback){

    this.on("mousedown",callback);

    },

    //鼠标松开

    mouseup : function(callback){

    this.on("mouseup",callback);

    },

    //鼠标移动

    mousemove : function(callback){

    this.on("mousemove",callback);

    },

    //点击

    click : function(callback){

    this.on("click",callback);

    },

    //双击

    dblclick : function(callback){

    this.on("dblclick",callback);

    },

    //提交按钮被点击

    submit : function(callback){

    this.on("submit",callback);

    },

    //鼠标悬停

    hover : function(over, out){

    this.mouseover(over);

    this.mouseout(out);

    },

    //获得焦点

    blur : function(callback){

    this.on("blur",callback);

    },

    //失去焦点

    focus : function(callback){

    this.on("focus",callback);

    },

    //内容被改变

    change : function(callback){

    this.on("change",callback);

    },

    //文本被选中

    select : function(callback){

    this.on("select",callback);

    },

    //关闭页面

    unload : function(callback){

    this.on("unload",callback);

    },

    //窗口大小被改变

    resize : function(callback){

    this.on("resize",callback);

    },

    //重置按钮被点击

    reset : function(callback){

    this.on("reset",callback);

    },

    //加载

    load : function(callback){

    this.on("load",callback);

    }

    });

    })();


    写得不好,不喜勿喷!!

    相关文章

      网友评论

          本文标题:MyQuery

          本文链接:https://www.haomeiwen.com/subject/endzvxtx.html