`

浅析jQuery框架与构造对象(转)

 
阅读更多
51CTO推荐专题: jQuery开发学习网址:http://developer.51cto.com/art/201005/202450.htm

文章针对jQuery 1.3.2版本,面向的读者应具备以下要求:

1.非常熟悉HTML

2.非常熟悉javascript语法知识

3.熟悉javascript面向对象方面的知识

4.熟练使用jQuery框架

jQuery对象的初始化是写在匿名函数里的,就像这样:

    (function(){alert("jQuery框架分析")})();

第一个括号是声明了一个函数,第二个括号是执行这个函数。也就是说,jQuery框架在页面载入的时候已经做了一些事情(这个个匿名函数已经被执行了)。做的这些事情使我们可以通过$("#yourId")或$(".yourClass")等方式获取页面元素,并把获取到的元素包装成jQuery对象。

匿名函数是怎么实现这些功能的呢?

首先框架定义了两个核心对象

    jQuery = window.jQuery = window.$ = function( selector, context ) {}

一个是jQuery

一个是$  

这两个对象都指向一个函数

这个函数是我们使用$()或jQuery()方法时的入口,这个方法返回一个jQuery.fn.init( selector, context );的实例,其实这个实例是一个jQuery对象。

jQuery对象是一个什么样的对象呢?

jQuery对象其实是一个javascript的数组

这个数组对象包含125个方法和4个属性

4个属性分别是

jQuery     当前的jQuery框架版本号

length     指示该数组对象的元素个数

context    一般情况下都是指向HtmlDocument对象 

selector   传递进来的选择器内容  如:#yourId或.yourClass等

如果你通过$("#yourId")方法获取jQuery对象,并且你的页面中只有一个id为yourId的元素那么$("#yourId")[0]就是HtmlElement元素与document.getElementById("yourId")获取的元素是一样的

jQuery对象是怎么构造出来的呢?

这个对象就是刚才我们提到的

    jQuery = window.jQuery = window.$ = function( selector, context ) {}

框架不只为此对象定义了一个方法,还定义了它的原型(prototype)

    jQueryjQuery.fn = jQuery.prototype = {//此处为json对象}

原型的定义是通过json对象定义的



    { 
    init: function( selector, context ) {//方法体}, 
    jQuery: "1.3.2",//属性 
    size: function() {//方法体}, 
    //...... 
    }

前面提到的125个方法4个属性有一部分在这个json对象中完成定义的 这个json对象中第一个方法就是init方法也就是入口方法中的jQuery.fn.init( selector, context );此方法与一个正则表达式对象配合来构造jQuery对象

这个正则表达式为:

    quickExpr = /^[^<]*(<(.|\s)+>)[^>]*$|^#([\w-]+)$/

下面我们说一下init方法的实现逻辑

此方法有两个参数

一个是selector(选择器)

一个是context(上下文)

selector就是我们用$("#yourId")或jQuery(".yourClass")传递进来的变量

这个参数不一定是字符串,也可能是其他形式的变量

等会儿我们就会介绍到

context参数我们在使用jQuery的时候很少用到,暂且不表

注意这两个参数都在返回的jQuery对象中体现出来了(以两个同名的属性展示)

下面看一下这个方法体内部的实现逻辑

    //如果没有选择器或者选择器为空的话,就把document对象赋值给他 
    selector = selector || document;  
    //如果selector参数是dom元素,直接返回jQuery对象 
    //也就是说你可以$(document.getElementById("allen"))把你的元素封装成jQuery对象 
    if ( selector.nodeType ) { 
    this[0] = selector; 
    this.length = 1; 
    this.context = selector; 
    return this; 
    }  
    //typeof 取对象的类型,用三个等号效率较高, 不需要类型转换,两个等号默认有类型转换 
    if ( typeof selector === "string" ) {  
    //这里用到了我们前面提到的正则表达式quickExpr 
    //match其实是一个数组 
    //第0个元素是与正则表达式相匹配的文本 
    //第1个元素是与正则表达式的第1个子表达式相匹配的文本(如果有的话) 
    //第2个元素是第2个子表达式相匹配的文本(如果有的话) 
    //第3个元素是第3个子表达式相匹配的文本(如果有的话)这里就是元素的ID,不包含# 
    var match = quickExpr.exec( selector );  
    //正则表达式匹配到了内容   并且 match[1]不为空 或者 context为空 
    //match[1]不为空的时候selector是HTML字符串,也就是你可以用$("  
    xland 
    ")把对象包装成jQuery对象 
    //context为空的时候selector是页面元素ID  
    if ( match && (match[1] || !context) ) {  
     //选择器为html字符串  此情况暂且不表 
    if ( match[1] ){ 
    selector = jQuery.clean( [ match[1] ], context );}  
    //选择器为ID 
    else { 
    //得到元素 
    var elem = document.getElementById( match[3] );  
     //如果得到了这个元素但是元素的ID属性不是match[3],跳入分支。分支里面的东西做了什么工作,暂且不表 
    if ( elem && elem.id != match[3] ){ 
    return jQuery().find( selector );}  
    //把得到的页面元素封装成jQuery对象 
    //如果elem为空,就传入一个空数组,框架怎么处理此空数组,暂且不表 
    //如果不为空就跳入我们前面说的if ( selector.nodeType )分支,构造出jQuery对象来 
    var ret = jQuery( elem || [] );  
     //设置jQuery对象的context属性 
    ret.context = document;  
     //设置jQuery对象的selector属性 
    ret.selector = selector;  
     //返回这个对象给调用者 
    return ret; 
    } 

至此

    var obj = $(“#yourId”);

构造jQuery对象的初步工作就做完了
分享到:
评论

相关推荐

    浅析JQuery框架及其插件应用

    ### 浅析JQuery框架及其插件应用 #### 一、jQuery框架概述 JQuery,一个由美国程序员John Resig创建的JavaScript库,自诞生以来迅速成为全球开发者钟爱的工具之一。它以“写得少,做得多”(WRITELESS,DOMORE)的...

    浅析jquery数组删除指定元素的方法:grep()

    `grep()`是jQuery中的一个函数,专门用于数组或类数组对象的过滤操作。它允许开发者定义一个函数,根据函数的返回值决定是否保留数组中的元素。`grep()`函数至少需要两个参数:第一个是要过滤的数组,第二个是过滤...

    浅析jQuery EasyUI中的tree使用指南

    本文将浅析jQuery EasyUI中tree组件的使用方法,内容基于开发经验的理解,为需要此方面的朋友们提供参考。 1. tree组件的基本初始化与配置 要使用tree组件,首先要在HTML页面中引入jQuery EasyUI的库文件,并初始化...

    深入浅析jQuery对象$.html

    **DOM与jQuery对象的互转** 1. **DOM转jQuery对象:** 如果已经有一个DOM对象,想将其转换为jQuery对象,只需要用`$()`将其包装起来。例如,`$(document)`将`document`对象转化为jQuery对象。 2. **jQuery转DOM...

    jquery开发入门整理(所需要了解的)

    ### 浅析jQuery框架与构造对象 jQuery框架的核心是`$`符号,这是一个全局函数,用于构造jQuery对象。jQuery对象实质上是对原生DOM对象的一种封装,它提供了一套统一的接口来操作DOM元素,使得跨浏览器编程变得更加...

    浅析jQuery 遍历函数,javascript中的each遍历_.docx

    6. `.each()` 方法:对 jQuery 对象进行迭代,为每个匹配元素执行函数。 7. `.end()` 方法:结束当前链中最近的一次筛选操作,并将匹配元素集合返回到前一次的状态。 8. `.eq()` 方法:将匹配元素集合缩减为位于指定...

    浅析Struts框架下的Java Web应用.pdf

    浅析Struts框架下的Java Web应用 Struts框架是基于MVC模式的开源框架,它能够有效实现系统开发中逻辑层和表示层的分离,促使逻辑层和表示层的彼此独立,从而大大减轻多层Web构建过程中的负担,提高了系统开发和应用...

    浅析平面Voronoi图的构造及应用.ppt

    Voronoi 图是一种重要的几何结构,它可以帮助我们解决许多关于点集或其他几何对象与距离有关的问题。 Voronoi 图的定义是:对于平面上 n 个点的点集 S,定义 V(Pi)=∩H(Pi,Pj),其中 H(Pi,Pj) 是半平面 L1,L1 内的...

    浅析jquery的作用与优势

    1. 操作页面对象:jQuery提供了一套简单且直观的方法来选取和操作页面上的DOM元素。开发者可以通过各种选择器如ID选择器、类选择器、属性选择器等来选中特定的元素,并对这些元素进行进一步的操作,比如修改内容、...

    jQuery的初始化与对象构建之浅析

    2. 通过`jQuery.fn.init`构造函数创建jQuery对象实例。 3. 通过`jQuery.fn.init.prototype = jQuery.fn`实现方法共享和链式调用。 4. 使用`window.jQuery = window.$ = jQuery`导出全局变量,便于调用。 理解这些...

    浅析JavaScript实现基于原型对象的“继承”.pdf

    浅析JavaScript实现基于原型对象的“继承” 本文旨在对JavaScript实现基于原型对象的“继承”进行深入分析,并与基于类的继承进行比较。通过对JavaScript的原型继承机制的介绍和实例分析,提出一个改进的“寄生组合...

    浅析jQuery中使用$所引发的问题

    `$`可以是一个函数,用于选择DOM元素,也可以是一个构造函数,用于创建新的jQuery对象。例如: ```javascript // 函数调用 var elements = $("div"); // 选择所有元素 // 构造函数调用 var divs = new jQuery("div...

    浅析jQuery Mobile的初始化事件

    jQuery Mobile 实际上在文档对象本身上触发其初始化事件,第一个触发的事件是mobileinit。 当Jquery Mobile开始执行时,他就会在document对象上触发mobileinit 事件,因为mobileinit事件是在加载后马上触发,所以你...

    浅析jquery与checkbox的checked属性的问题

    jQuery与checkbox的checked属性之间的关系是前端开发者经常需要处理的问题。在Web开发过程中,复选框(checkbox)是用来让用户选择多个选项的常用表单控件,而jQuery是一个广泛使用的JavaScript库,它简化了HTML文档...

    浅析在javascript中创建对象的各种模式_.docx

    在实际应用中,经常将构造函数模式与原型模式结合,以兼顾对象的初始化和方法共享。构造函数用于初始化实例属性,而原型用于添加或重写方法。 5. **原型动态模式**: JavaScript的动态性允许在运行时修改对象的...

    jquery浅析PPT

    JavaScript+Jquery浅析PPT资源

Global site tag (gtag.js) - Google Analytics