从这篇起,在没有介绍到各类插件之前,后面将陆续介绍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关键之指向当前循环的项(遍历函数中的第二个参数)。

遍历中返回 nullundefined,遍历将结束。

基本上就是实现了原生数组函数map的zepto对象包装,重点是会形成新的数组返回。

each:

遍历一个对象集合每个元素。在迭代函数中,this关键字指向当前项(作为函数的第二个参数传递)。如果迭代函数返回 false,遍历结束。

这个主要是在函数内部对遍历到的元素进行处理,不会返回新的数组,return this的目的是保持连缀。

对类数组相关方法的实现,利用到了很多数组原生函数,所以如果需要对这块进行更深刻的了解的话,可以更深入的了解一下数组的原生函数。

zepto源码--核心方法(类数组相关)--学习笔记的更多相关文章

  1. zepto源码--核心方法10(位置)--学习笔记

    今天基本上就是zepto学习笔记的最后一篇了,介绍一下有关位置的函数,position, offset, scrollLeft, scrollTop scrollLeft 如果所选取的包装集不存在,则 ...

  2. zepto源码--核心方法9(管理包装集)--学习笔记

    今天介绍的是与子元素相关的函数,children, find, contents children 从源码来看,主要是调用过滤函数filtered对遍历整个包装集返回的children进行过滤. 仔细 ...

  3. zepto源码--核心方法7(管理包装集)--学习笔记

    后面应该会有几篇连续介绍关于zepto包装集的文章.涉及的函数较多,就分别介绍,今天介绍几个使用关系获取包装集的方法.prev, next, first, last, siblings, eq pre ...

  4. zepto源码--核心方法3(属性相关)--学习笔记

    继续$.fn方法 今天主要介绍几个跟属性操作相关的方法attr, removeAttr, prop, data attr 读取或设置dom的属性.如果没有给定value参数,则读取对象集合中第一个元素 ...

  5. zepto源码--核心方法2(class相关)--学习笔记

    继续上篇,本片主要介绍的是$.fn中与class相关的函数,包括hasClass, addClass, removeClass, toggleClass hasClass: 检查对象集合中是否有元素含 ...

  6. zepto源码--核心方法8(管理包装集)--学习笔记

    继续包装集过滤的相关函数的介绍,今天介绍与父元素相关的函数,parent, parents, closest, offsetParent parent 获取对象集合中每个元素的直接父元素. 与上篇文章 ...

  7. zepto源码--核心方法5(文本操作)--学习笔记

    涉及到文本内容的主要有三个函数:html, text, val. 我们已经见过多次,一个函数多种用途的情况,今天这三个函数也不例外,既可以获取内容,也可以设置内容.判断条件就是有没有传入参数,如果没有 ...

  8. zepto源码--核心方法6(显示隐藏)--学习笔记

    在不引入zepto插件模块fx_metho其他ds的情况下,zepto默认的显示隐藏的函数只有show, hide, toggle,这里解释有个前提条件,就是没有引入zepto的fx_methods插 ...

  9. zepto源码--核心方法4(包装)--学习笔记

    主要介绍一下wrap, wrapAll, wrapInner, unwrap方法. wrapAll 在所有匹配元素外面包一个单独的结构.结构可以是单个元素或 几个嵌套的元素,并且可以是html字符串或 ...

随机推荐

  1. UVa1212 Duopoly(最小割)

    题目大概说有两家通讯公司,它们分别有几个投标,投标各有价值且各个投标都包含几个频道,相同公司的各个投标包含频道都是互不相同的,而频道不能被同时选用.问怎么选择采取哪家公司哪些投标使得价值最大. 如此建 ...

  2. .net接口开发远程调试

    第一步: 找到你的C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\Remote Debugger\x64\msvsmon ...

  3. NoSql之MongoDB--Ubuntu下安装

    MongoDB只提供了64位LTS(长期支持)Ubuntu发行版的packages.例如,12.04 LTS,14.04 LTS,16.04 LTS等等. 1.导入被包管理系统使用的公钥 Ubuntu ...

  4. ural 1252. Sorting the Tombstones

    1252. Sorting the Tombstones Time limit: 1.0 secondMemory limit: 64 MB There is time to throw stones ...

  5. POJ 3320 (尺取法+Hash)

    题目链接: http://poj.org/problem?id=3320 题目大意:一本书有P页,每页有个知识点,知识点可以重复.问至少连续读几页,使得覆盖全部知识点. 解题思路: 知识点是有重复的, ...

  6. 使用 smartupload 上传图片

    使用  smartupload  请参见 elleniou 的 博客 : http://www.cnblogs.com/elleniou/archive/2012/09/24/2700583.html

  7. CentOS 6.6 下配置软RAID5

    在虚拟机中增加4块5G的硬盘 安装依赖包 yum install -y parted mdadm 查看一下硬盘信息fdisk -l

  8. 如何将一个对象存到网页中并在js中使用

    需求:希望在js中使用Controller传过来的对象,特别是对象里存有list的数据. 不希望循环使用隐藏域. 解决办法:在View中使用Json.Net序列化: @{ string jsonStr ...

  9. Xcode的command+shift+o是一个不错的工具

    一,经历 1.在向UITextField中输入图片的时候,可以使用 NSAttributedString 添加,但是很难找到能够返回NSAttributedString对象的方法. 2.通过comma ...

  10. Sping Environment为Null的原因和解决方法

    参考:https://github.com/spring-projects/spring-boot/issues/4711 这个issue提出不到20天给我搜出来了,还是相信google的强大 问题: ...