从这篇起,在没有介绍到各类插件之前,后面将陆续介绍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. iOS学习11之OC继承

    面向对象的三大特性:封装,继承,多态. 1.继承 继承既能保证类的完整,又能简化代码. 把公共的⽅法和实例变量写在⽗类⾥,⼦类只需要写⾃⼰独有的实例变量和⽅法即可. 继承是⾯向对象三⼤特性之⼀,合理的 ...

  2. BZOJ2990 : [Ontak2010]Keyboard

    考虑从$(1,1)$开始搜索移动方案,每次移动坐标的变化量都是$2$. 如果构成了环,那么环的周长肯定是偶数. 考虑这个环一定要被若干个骨牌覆盖,且还有一个位置是空的. 所以得出环的周长是奇数,矛盾, ...

  3. 关于vim插件

    本人比较喜欢amix它集成了很多插件. 1.mru.vim:用于打开最近使用过的文件 使用命令: :MRU     打开最近的文件列表 上下箭头可以移动关标 :o 在新窗口中打开文件 2.NERD T ...

  4. Codeforces Round #242 (Div. 2) C. Magic Formulas

    解题思路是: Q=q1^q2.......^qn = p1^p2......^pn^((1%1)^....(1%n))^((2%1)^......(2%n))^.... 故Q的求解过程分成两部分 第一 ...

  5. ACM 字母统计

    字母统计 时间限制:3000 ms  |  内存限制:65535 KB 难度:1   描述 现在给你一个由小写字母组成字符串,要你找出字符串中出现次数最多的字母,如果出现次数最多字母有多个那么输出最小 ...

  6. JS中的专业术语

    本身虽然是学技术出身,但.....此处省略N个字符 1.Namespace 命名空间 允许开发人员在一个独特, 应用相关的名字的名称下捆绑所有功能的容器. 2.Class类 定义对象的特征.它是对象的 ...

  7. 【JAVA】LOG4J使用心得

    一.LOG4J基础: 1.日志定义        简单的Log4j使用只需要导入下面的包就可以了 // import log4j packages import org.apache.log4j.Lo ...

  8. 八、天气App案例

    该app为 现版本 SDK 8.4 Xcode 一.新建项目 运行Xcode 选择 Create a new Xcode project ->Single View Application 命名 ...

  9. Picture effect of JavaScript

    每隔一定时间跟换图片Img = new Array("image/2.jpg","image/1.jpg","image/3.jpg",&q ...

  10. 全浏览器收藏网站javascript

    function MyFavorite(sURL, sTitle) { var ctrl = (navigator.userAgent.toLowerCase()).indexOf('mac') != ...