jQuery并不像他表面显示的那样,只有那些额定的方法供我们使用。其他在他库的代码内有着很多很酷很便捷的潜在方法,等待被我们发现。在本文中,我将带领你去领略一些我在jQuery库中发现的那些不怎么常见的方法。
1.理解jQuery方法:
当你调用jQuery方法时会发生什么呢?看看jQuery的方法体,非常地简单。
1 2 3 4 |
jQuery = function (selector, context) { // The jQuery object is actually just the init constructor 'enhanced' return new jQuery.fn.init(selector, context); }; |
在表层的代码之下,jQuery方法(通常称之为“包装”方法)将返回一个实例化后的jQuery对象,即’jQuery.fn.init’构造函数的一个实例。
理解了这一点非常有用,当我们每次调用jQuery方法时,都会返回一个带有一组属性的完全独立的对象。而jQuery的聪明之处在于返回的这个对象是以数组的方式返回的。该对象中的所有元素(通称”集合“)都是由一个数字索引所指向,就像数组中的下标一样。而且jQuery还返回了一个对象的length属性,就像数组中的长度一样。这种思想给jQuery方法提供了无限的想象空间。比如,我们可以从’Array.prototype’中借用一些功能性方法。jQuery中的slice方法就是一个典型的例子:
1 2 3 4 5 6 7 8 9 10 |
/* ... jQuery.fn.extend({ ... */ slice: function() { return this.pushStack( Array.prototype.slice.apply( this, arguments ), "slice", Array.prototype.slice.call(<wbr>arguments).join(",") ); }, /* ... */ </wbr> |
在该slice方法不管this是否是一个真实的数组,它和其他的元素会和睦地相处,因为有着”length“这么一个属性。
jQuery中还有一些其他有趣的属性,比如”selector”—选择器,”context”—-上下文等。大部分的时候,只需给jQuery方法传递对象参数即可:
1 2 |
var jqObject = jQuery('a'); jqObject.selector; // => "a" |
一个重要的提示是,jQuery有时会返回一个全新的对象供你使用。比如你试图通过执行一段代码来改变一个集合,如”parent()”方法,但是此时jQuery将不会修改当前的对象,它会返回给你一个全新的对象。
1 2 3 4 |
var originalObject = jQuery('a'); var anotherObject = originalObject.parents(); originalObject === anotherObject; // => false |
所有试图改变集合的方法都会返回一个新的jQuery对象,你可以通过”.end()”方法或”.prevObject”属性来访问之前的那个对象。