3. 添加元素
jQuery还为类数组定义了添加元素的方法,其实现代码如下所示。
广州网站建设,网站建设,广州网页设计,广州网站设计
- add: function( selector ) {
- return this.pushStack( jQuery.unique( jQuery.merge(
- this.get(),
- typeof selector === "string" ?
- jQuery( selector ) :
- jQuery.makeArray( selector )
- )));
- }
上面方法能够把与表达式匹配的元素添加到jQuery对象中,类数组的集合也可以被追加进来。
4. 过滤元素
使用add()方法可以把其他元素增加到类数组中来,当然有的时候也需要过滤类数组中不需要的元素。jQuery提供了filter()和not()方法来过滤元素。
filter()方法能够筛选出与指定表达式匹配的元素集合。可以通过该方法来筛选当前jQuery对象的元素,或者是使用逗号分隔的多个表达式。其实现代码如下。
- filter: function( selector ) {
- return this.pushStack(
- jQuery.isFunction( selector ) &&
- jQuery.grep(this, function(elem, i){
- return selector.call( elem, i );
- }) ||
- jQuery.multiFilter( selector, jQuery.grep(this, function(elem){
- return elem.nodeType === 1;
- }) ), "filter", selector );
- }
filter()方法是jQuery.grep()和jQuery.multiFilter()函数功能的综合,如果参数是函数的话,就采用jQuery.grep()函数来完成,否则采用jQuery.multiFilter()函数进行selector方式的过滤。
jQuery.grep()函数提供了以自定义函数回调的形式来过滤集合中不需要的元素,最后形成需要的数组,与map()函数功能类似。
- // 过滤elems中满足callback处理的所有元素,inv参数表示相反操作
- grep : function(elems, callback, inv) {
- var ret = [];
- for (var i = 0, length = elems.length;i < length; i++)
- if (!inv != !callback(elems[i], i))
- ret.push(elems[i]);
- return ret;
- },
jQuery.multiFilter()函数与jQuery.filter()函数的区别不大。multiFilter支持采用符号分隔的selector多表达式方式。其实现代码如下。
广州网站建设,网站建设,广州网页设计,广州网站设计
- jQuery.multiFilter = function( expr, elems, not ) {
- if ( not ) {
- expr = ":not(" + expr + ")";
- }
- return Sizzle.matches(expr, elems);
- };
jQuery.multiFilter()函数可以作为筛选器,与jQuery.filter()函数一样,selector的多表达式也可以只是筛选器的组合,即以·、#、:、[这四种符号做分隔的表达式。
not()方法也是根据selector来过滤不符合条件的元素,但是not()方法是建立于filter()方法基础之上的,执行效率会更高。其实现代码如下所示。
- not: function( selector ) {
- if ( isSimple.test( selector ) )
- return this.pushStack( jQuery.multiFilter( selector, this, true ), "not", selector );
- else
- selector = jQuery.multiFilter( selector, this );
- var isArrayLike = selector.length && selector[selector. length - 1] !== undefined && !selector.nodeType;
- return this.filter(function() {
- return isArrayLike ? jQuery.inArray( this, selector ) < 0 : this != selector;
- });
- }



