zoukankan      html  css  js  c++  java
  • 简单模拟JQuery框架

    模拟JQuery

    1.首先模拟一个jquery对象,在这里起名叫xjs,如下代码:

            var xjs = function(selector) {
                return document.getElementById(selector);
            }
    
            alert(xjs("d1").innerHTML);
    

    但是现在通过xjs返回的是一个dom对象,这跟jquery返回的是一个jquery对象不同。为了让xjs返回本身自己,需要扩展xjs。

     
        var xjs = function(selector) {
            return xjs.fn.init(selector);
        }
    
            
     xjs.fn = xjs.prototype = {
            init: function(selector) {
                if (typeof selector == "string") {
                    this[0] = document.getElementById(selector);
                    return this;
                }
            }
        }
    

    以上代码不对selector合法性检查,就认为其实一个合法的id。像上面代码扩展xjs对象,通过xjs.fn.init返回其本身,这样我通过xjs("")获取的对象就是一个xjs自己了。

    2.给xjs起个简单的别名如$

     
    window.$ = window.xjs = xjs;
    

    这样就能直接用$("")的形式来使用了。

    3.防止命名冲突

    (function() {
        var xjs = function(selector) {
            return xjs.fn.init(selector);
        }
    
        xjs.fn = xjs.prototype = {
            init: function(selector) {
                if (typeof selector == "string") {
                    this[0] = document.getElementById(selector);
                    return this;
                }
            }
        }
    
        window.$ = window.xjs = xjs;
    })();
    

    4.实现xjs.html()

    因为通过$或xjs返回的对象已经是自己本身了,所以要使用innerHTML这类的js属性或方法就必须要把xjs对象转换成dom对象。所以可以跟jquery一样来实现自己的方法。

    (function() {
        xjs.fn = xjs.prototype = {
            init: function(selector) {
                if (typeof selector == "string") {
                    this[0] = document.getElementById(selector);
                    return this;
                }
            },
            html: function() {
                if (arguments.length == 0) {
                    return this[0].innerHTML;
                }
                else {
                    this[0].innerHTML = arguments[0];
                }
            },
            version: "8.8.8"
        }
    

    如果不传参数则获取对象的html内容,如果传入参数,则设置对象的html内为传入的值。

    为了使xjs实例对象继承xjs原型初始的里的方法和属性,通过把xjs原型赋给xjs对象

    xjs.fn.init.prototype = xjs.fn;
    
    这样,在使用的时候就能通过下面的形式来获取version属性
    alert(t.version);
    
    到此为止,一个简单模拟的xjs就完成了,完整代码如下
    (function() {
        var xjs = function(selector) {
            return xjs.fn.init(selector);
        }
    
        xjs.fn = xjs.prototype = {
            init: function(selector) {
                if (typeof selector == "string") {
                    this[0] = document.getElementById(selector);
                    return this;
                }
            },
            html: function() {
                if (arguments.length == 0) {
                    return this[0].innerHTML;
                }
                else {
                    this[0].innerHTML = arguments[0];
                }
            },
            version: "8.8.8"
        }
    
        xjs.fn.init.prototype = xjs.fn;
    
        window.$ = window.xjs = xjs;
    })();
    
    在页面中引入上面这个Js文件后,就能像下面一样使用了
            var t = $("d1");
    
            t.html("hello");
            alert(t.html());
            alert(t.version);
    
    
    上面的d1为一个html元素的id。
  • 相关阅读:
    OC动态特性
    app之间的互相跳转
    将服务器返回的URL或者网址截取出来特定的字符,然后将字符返回,一般根据返回的字符判断用户是否登录等即时状态
    网络请求的封装
    代理传值
    sql脚本查询日期时间段日期
    SQL >日期函数
    Sql 中text类型字段判断是否为空
    修复IE9.0下PlaceHolder 属性问题js脚本
    迅雷专用下载的几种代码
  • 原文地址:https://www.cnblogs.com/xqhppt/p/2106883.html
Copyright © 2011-2022 走看看