jQuery1.0源代码分析之构造函数完整注释(五)

来源:网络 责任编辑:栏目编辑 发表时间:2013-07-02 02:14 点击:

 

jQuery的函数设计都很紧凑,相互调用很多。例如,你要看明白a函数,发现a里面调用b函数,b里面又调用c函数。这样一路跟下去,基本上就看晕了。

 

所以,我建议最好是一个函数一个函数的读懂,不要深跟,等通篇都看完一遍,自然就都通了。

 

 

所以今天把jQuery的构造函数注解一下。

 

 

function jQuery(a,c) { 

 

    // 处理ready函数,$(function() { }) 

    if ( a && a.constructor == Function && jQuery.fn.ready ) 

        return jQuery(document).ready(a); 

 

    // 给a设一个默认值 

    a = a || jQuery.context || document; 

 

    // 如果a是jQuery对象,把a和空数组合并,然后返回,这样做的目的是不破坏原来的jQuery对象。 

        //(注:jquery属性是每个jQuery对象都有的,值为jQuery的版本) 

    if ( a.jquery ) 

        return $( jQuery.merge( a, [] ) ); 

 

    // 如果c是jQuery对象,调用find函数,去查找 

    if ( c && c.jquery ) 

        return $( c ).find(a); 

     

    // 以上情况都不是,开始new jQuery对象 

    if ( window == this ) 

        return new jQuery(a,c); 

 

    // 如果a是html代码,$('<div />'),把html代码转成Dom元素 

        // jQuery.clean就是把html代码转换成Dom元素数组 

        var m = /^[^<]*(<.+>)[^>]*$/.exec(a); 

    if ( m ) a = jQuery.clean( [ m[1] ] ); 

 

    // 如果a是数组或者类数组,并且里面装的都是dom元素,把a和空数组合并一下 

        // 如果是其他情况,就调用find函数,find函数是处理css表达式的 

        // 最后调用get方法,做出jQuery对象返回         

        this.get( a.constructor == Array || a.length && !a.nodeType && a[0] != undefined && a[0].nodeType ? 

        // Assume that it is an array of DOM Elements 

        jQuery.merge( a, [] ) : 

 

        // Find the matching elements and save them for later 

        jQuery.find( a, c ) ); 

 

        // 最后看一下最后一个参数是不是Function,是的话遍历执行一下 

    var fn = arguments[ arguments.length - 1 ]; 

     

    if ( fn && fn.constructor == Function ) 

        this.each(fn); 

 

最后,从上面的构造函数代码来看,jQuery构造函数主要支持一下几种方式

 

 

1、$( Function ),ready函数

 

2、$( Element ) / $( [ Element] ),可以把Dom元素或者数组直接转换成jQuery对象

3、$( CSS Expression, Content), 也可以用CSS表达式来选取Dom元素

 

4、$( Html ),html也可以转换成jQuery对象

 

 


作者 baozhifei
    发表评论
    请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
    用户名: 验证码:点击我更换图片
    最新评论 更多>>

    推荐热点

    • Gb2312转utf-8编码的方法(vbs+js)
    • 如何使用Ajax技术开发Web应用程序(1)
    • js跳转路径问题
    • JavaScript模仿桌面窗口
    • 用js检测两个线段是否相交
    • 我知道的JavaScript -- 设计模式(桥接)应用之 – 验证器
    • 运用JavaScript构建你的第一个Metro式应用程序(on Windows
    • 我是如何去了解jquery的(六),案例之幻灯片轮换
    • Jquery封装幻灯片效果
    网站首页 - 友情链接 - 网站地图 - TAG标签 - RSS订阅 - 内容搜索
    Copyright © 2008-2015 计算机技术学习交流网. 版权所有

    豫ICP备11007008号-1