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。
  • 相关阅读:
    Warning This file includes at least one deprecated or antiquated header
    springdata spring 的nosql的orm框架学习
    C#中this关键字的用法
    java 的svn客户端调用示例
    jsoncpp longlong 类型的扩展
    HTML中的a标签实现点击下载
    android实现自动安装
    键值对 纵一苇之所如
    Js 日期选择,可以的一个页面中重复使用本JS日历,兼容IE及火狐等主流浏览器,而且界面简洁、美观,操作体验也不错。 纵一苇之所如
    C# 判断文件有没占用 纵一苇之所如
  • 原文地址:https://www.cnblogs.com/xqhppt/p/2106883.html
Copyright © 2011-2022 走看看