JQuery 工作原理

JQuery最重要的作用就是查询DOM节点,比浏览器原生的查询方式更加优雅,比如html中的一张图片:

<img src="bar.jpg" id="img"/>

两种查询方式比较:

//原生接口
var image = document.getElementById('img');

//JQuery 方法
var jqImgae = $('#img');

jQuery 与 jQuery.fn

在JQuery源码中,JQuery()的实现方式:

jQuery = function( selector, context ) {
    return new jQuery.fn.init( selector, context, rootjQuery );
}

可以看到内部返回了一个jQuery.fn.init对象,用这种方式创建DOM对象的好处是隐藏了new的过程,使用 jQuery(‘#id’) 创建对象更加简洁,而不是 new jQuery(‘#id’)

jQuery.fn.init()函数实际是封装了查询DOM节点的原生接口,下面是init()的简洁版实现,JQuery中的实现复杂的多,还要考虑浏览器兼容性问题。

jQuery.fn = jQuery.prototype = {
    init: function(selector, context){
        var nodeList = (context || document).querySelectorAll(selector);
        this.length = nodeList.length;
        for (var i=0; i<this.length; i+=1) {
            this[i] = nodeList[i];    
        }
        return this;
    },

    each:function(){...}
    ...
}

可以看到init()函数中将DOM节点赋值给了自己this[i] = nodeList[i],因此返回的init对象是一个类数组,包含了DOM节点列表,还包括一些其他的方法。

其中 jQuery.fn = jQuery.prototype 则可以隐藏prototype属性,在后面为jQuery添加新方法时可以使用

jQuery.fn.each = function(){...}
jQuery.fn.map  = function(){...}

但是new jQuery.fn.init()中返回this,即init对象,此时init对象上并没有添加任何方法,于是:

jQuery.fn.init.prototype = jQuery.fn;

这样init对象继承了jQuery.fn中的所有方法,就可以愉快地使用了。


jQuery.extend

jQuery中还使用了大量extend({…})

jQuery.extend = jQuery.fn.extend = function(){..}

该函数主要目的是简化添加扩展函数的过程:

例如:

jQuery.fn.each = function(){...}
jQuery.fn.map  = function(){...}
jQuery.fn.css  = function(){...}

可以简化为

jQuery.fn.extend({
    each:function(){...},
    map:function(){...},
    css:function(){...},
})

jQuery.extend jQuery.fn.extend区别像是一个静态函数,一个实例函数,前者使用方法为:

jQuery.extend({
    isWindow: function( obj ) {
        return obj != null && obj == obj.window;
    }
})

jQuery.isWindow(window)  //true

而后者

jQuery.fn.extend({
    addClass: function() {...}
})

jQuery('#img').addClass('small')
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
jQuery是一个非常流行的JavaScript库,它简化了JavaScript的编写,并提供了许多实用的功能。以下是一些解读jQuery代码的方法和技巧: 1.了解jQuery的基本结构:jQuery的核心代码包含在一个立即执行函数表达式(IIFE)中,该函数将window对象作为参数传递,并返回一个jQuery对象。这个jQuery对象是一个包含许多实用方法和属性的对象,可以用来操作DOM元素、处理事件、发送AJAX请求等。 2.阅读jQuery的文档:jQuery有非常详细的文档,可以在官方网站上找到。文档中包含了所有的API方法和属性,以及示例代码和解释。阅读文档可以帮助你更好地理解jQuery工作原理和用法。 3.了解jQuery的选择器:jQuery的选择器是其最强大的功能之一,它可以让你轻松地选择DOM元素并对其进行操作。了解jQuery的选择器语法和用法可以帮助你更好地理解代码。 4.了解jQuery的链式调用:jQuery的方法通常可以链式调用,这意味着你可以在同一个jQuery对象上调用多个方法。这种方法可以使代码更加简洁和易于阅读。 5.了解jQuery的事件处理:jQuery提供了一种简单的方式来处理DOM事件,可以使用on()方法来绑定事件处理程序。这种方法可以使代码更加简洁和易于维护。 以下是一个使用jQuery的例子,它将在页面加载时隐藏一个元素,并在按钮点击时显示它: ```javascript $(document).ready(function() { $('#myElement').hide(); $('#myButton').click(function() { $('#myElement').show(); }); }); ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值