zepto源码--核心方法(类数组相关)--学习笔记
从这篇起,在没有介绍到各类插件之前,后面将陆续介绍zepto对外暴露的核心方法。即$.fn={}里面的所有方法的介绍。会配合zepto的API进行介绍。
其实前面已经介绍了几个,如width,height,prepend等等,今天开始的是zepto源码里面,明确的封装在$.fn对象里面的方法。
本篇介绍的是与类数组(NodeList)操作相关的各种方法:
forEach,reduce,push,sort,splice,indexOf,concat,map,slice,toArray,each,filter,not
插上一句,关于$.fn对象最前面的两个属性

constructor:zepto.Z是为了确保zepto创建的对象,constructor都指向zepto.Z
length:0是为了解决在低版本ie中对象冒充时,ie浏览器不能提供的特性。
forEach,reduce,push,sort,splice,indexOf这6个函数,完全是调用ECMAScript中有关数组的原生函数,不做过多解释,需要更多了解的话,可以自行了解。
concat:

添加元素到一个Zepto对象集合形成一个新数组。如果参数是一个数组,那么这个数组中的元素将会合并到Zepto对象集合中。
这里有两个函数调用需要注意
value.toArray(),这个方法是在后面介绍了的,调用get方法直接将zepto对象转换为dom对象。
另外一个就是return concat,这个concat是前面定义的变量 concat = emptyArray.concat,是数组原生方法,千万不能与我们自定义的函数concat相混淆。
slice:

提取这个数组array的子集,从start开始,如果给定end,提取从从start开始到end结束的元素,但是不包含end位置的元素。
调用数组原生函数,提取nodeList的子集,然后包装成zepto对象返回。这里函数内部的slice也是前面定义的变量slice = emptyArray.slice.
filter:

过滤对象集合,返回对象集合中满足css选择器slelctor的项。如果参数为一个函数,函数返回有实际值得时候,元素才会被返回。在函数中, this 关键字指向当前的元素。
如果传入的参数为函数,则调用not方法实现,this.not(this.not(selector)),通俗点讲:就是负负得正,所以使用了两个this.not
非函数情况下,调用zepto.matches判断当前的元素是否匹配传入的参数,如果匹配就返回。
not:

过滤当前对象集合,获取一个新的对象集合,它里面的元素不能匹配css选择器。如果另一个参数为Zepto对象集合,那么返回的新Zepto对象中的元素都不包含在该参数对象中。如果参数是一个函数。仅仅包含函数执行为false值得时候的元素,函数的 this 关键字指向当前循环元素。
如果传入的参数为函数,则对匹配的zepto对象(如:$('li'))遍历,调用传入的函数,如果selector.call(this, idx)==false时,表示,当前遍历到的选项不符合selector函数,则把当前项存入数组nodes。
如果传入的参数不是函数,正好可以利用与not函数功能完全相反的filter函数来实现,获得能够匹配选择器的选项赋值给excludes,遍历选取的zepto对象(如:$('li')),如果
excludes中不存在遍历到的当前的选项el,则将el存入数组nodes,最后将nodes包装成zepto对象并返回出来。
map:

遍历对象集合中的所有元素。通过遍历函数返回值形成一个新的集合对象。在遍历函数中this关键之指向当前循环的项(遍历函数中的第二个参数)。
遍历中返回 null和undefined,遍历将结束。
基本上就是实现了原生数组函数map的zepto对象包装,重点是会形成新的数组返回。
each:

遍历一个对象集合每个元素。在迭代函数中,this关键字指向当前项(作为函数的第二个参数传递)。如果迭代函数返回 false,遍历结束。
这个主要是在函数内部对遍历到的元素进行处理,不会返回新的数组,return this的目的是保持连缀。
对类数组相关方法的实现,利用到了很多数组原生函数,所以如果需要对这块进行更深刻的了解的话,可以更深入的了解一下数组的原生函数。
zepto源码--核心方法(类数组相关)--学习笔记的更多相关文章
- zepto源码--核心方法10(位置)--学习笔记
今天基本上就是zepto学习笔记的最后一篇了,介绍一下有关位置的函数,position, offset, scrollLeft, scrollTop scrollLeft 如果所选取的包装集不存在,则 ...
- zepto源码--核心方法9(管理包装集)--学习笔记
今天介绍的是与子元素相关的函数,children, find, contents children 从源码来看,主要是调用过滤函数filtered对遍历整个包装集返回的children进行过滤. 仔细 ...
- zepto源码--核心方法7(管理包装集)--学习笔记
后面应该会有几篇连续介绍关于zepto包装集的文章.涉及的函数较多,就分别介绍,今天介绍几个使用关系获取包装集的方法.prev, next, first, last, siblings, eq pre ...
- zepto源码--核心方法3(属性相关)--学习笔记
继续$.fn方法 今天主要介绍几个跟属性操作相关的方法attr, removeAttr, prop, data attr 读取或设置dom的属性.如果没有给定value参数,则读取对象集合中第一个元素 ...
- zepto源码--核心方法2(class相关)--学习笔记
继续上篇,本片主要介绍的是$.fn中与class相关的函数,包括hasClass, addClass, removeClass, toggleClass hasClass: 检查对象集合中是否有元素含 ...
- zepto源码--核心方法8(管理包装集)--学习笔记
继续包装集过滤的相关函数的介绍,今天介绍与父元素相关的函数,parent, parents, closest, offsetParent parent 获取对象集合中每个元素的直接父元素. 与上篇文章 ...
- zepto源码--核心方法5(文本操作)--学习笔记
涉及到文本内容的主要有三个函数:html, text, val. 我们已经见过多次,一个函数多种用途的情况,今天这三个函数也不例外,既可以获取内容,也可以设置内容.判断条件就是有没有传入参数,如果没有 ...
- zepto源码--核心方法6(显示隐藏)--学习笔记
在不引入zepto插件模块fx_metho其他ds的情况下,zepto默认的显示隐藏的函数只有show, hide, toggle,这里解释有个前提条件,就是没有引入zepto的fx_methods插 ...
- zepto源码--核心方法4(包装)--学习笔记
主要介绍一下wrap, wrapAll, wrapInner, unwrap方法. wrapAll 在所有匹配元素外面包一个单独的结构.结构可以是单个元素或 几个嵌套的元素,并且可以是html字符串或 ...
随机推荐
- JQuery EasyUI window 用法
var $win; $win = $('#test-window').window({ title: '添加课程设置信息', width: 820, height: 450, top: ($(wind ...
- [转]expect的安装
转自:http://blog.chinaunix.net/uid-20639775-id-2453085.html Expect是在Tcl基础上创建起来的,它还提供了一些Tcl所没有的命令,它可以用来 ...
- ORA-01034错误:ORALCE NOT CONNECT
解决办法: 启动数据库 sqlplus '/as sysdba ' startup;
- 查看linux中某个端口(port)是否被占用(netstat,lsof)
查看linux中某个端口(port)是否被占用(netstat,lsof) netstat命令可以显示网络连接,路由表,接口状态,伪装连接,网络链路信息和组播成员组等信息.命令格式:netstat [ ...
- nodejs高大上的部署方式-PM2
1.最常用的属nohup了,其实就是在后台执行进程,末尾加个& [zhoujie@ops-dev ~]$ nohup node /home/zhoujie/ops/app.js & ...
- Node.js执行存储过程
直接上代码 var sql = require('mssql'); var config = { user: 'sa', password: '123456', server: ...
- javaweb之框架标签(day1 框架标签的使用)
框架标签 <frameset> --rows:按照行进行划分<frameset rows='80,*'> --rows:按照列进行划分<frameset cols='80 ...
- [LintCode] Evaluate Reverse Polish Notation 计算逆波兰表达式
Evaluate the value of an arithmetic expression in Reverse Polish Notation. Valid operators are +, -, ...
- [LintCode] Move Zeroes 移动零
Given an array nums, write a function to move all 0's to the end of it while maintaining the relativ ...
- Winform程序以Icon的形式显示在任务栏右下角
Form最小化是指整个Form都缩小到任务栏上,但是是以Form的标题栏形式显示的, 若是想让Form以Icon的形式显示在任务栏右下角,则需要给Form添加一个NotifyIcon控件, 在使窗体最 ...