zepto源码--核心方法9(管理包装集)--学习笔记
今天介绍的是与子元素相关的函数,children, find, contents
children

从源码来看,主要是调用过滤函数filtered对遍历整个包装集返回的children进行过滤。
仔细看来,最终实现children依赖的是内部定义的children函数。

在支持直接获取元素children属性的浏览器当中,直接通过elment.children获取子元素,通过调用slice函数,返回数组对象,如果不支持element.children,则对element.childNodes进行遍历,返回节点为1,即返回元素节点的子元素。
从children函数来看,实现的是获取的是每个匹配元素集合元素的直接子元素,对外暴露的children方法,增加了选择器参数,如果给定选择器参数,则返回的是符合选择器的直接子元素。
find

find函数相对复杂一点,主要在于需要区分传入的参数。
先定义变量result,用于存放匹配结果,将this赋值给$this。
最后返回result。
中间部分就是实现获取匹配结果,并存入result。
if (!selector) result = $() 如果没有传递参数,则直接将$()作为结果赋值给result。

如果传入的参数为对象类型,如$('#form1').find($('input')),调用filter函数,对$('input')进行过滤,选择是$('#form1')的子元素的$('input')返回。
这里有两个this 的情况,需要分清楚,node = this,表示当前的每一个input元素,通过调用some函数,some函数绑定的上下文是$this,是选择的包装集,这里指的是$('#form1')。some函数通过$.contains(parent, node)判断当前的选择是否是包装集的子元素。多说一句some函数,遍历整个数组,只要毁掉函数中有一个返回真值就返回真。这里就是说,只要当前的input元素是包装集中的任何一个的子元素,就表示当前的元素是包装集的子元素。

如果包装集中只有一个对象,则直接调用zepto选择器,并将结果包装成zepto对象,再赋值给result。

如果包装集对象是多个,则对多个对象逐一遍历,调用zepto选择器,获取匹配的元素,赋值给result,这里没有用$包装,是因为this.map会进行一次包装。
如此就实现了,选择所有子元素。
contents

该函数与children类似,但是contents获取的是包括文本节点的子元素,常常用来获取<iframe>元素的内容,contentDocument 属性以 HTML 对象返回框架容纳的文档。
zepto源码--核心方法9(管理包装集)--学习笔记的更多相关文章
- zepto源码--核心方法4(包装)--学习笔记
主要介绍一下wrap, wrapAll, wrapInner, unwrap方法. wrapAll 在所有匹配元素外面包一个单独的结构.结构可以是单个元素或 几个嵌套的元素,并且可以是html字符串或 ...
- zepto源码--核心方法10(位置)--学习笔记
今天基本上就是zepto学习笔记的最后一篇了,介绍一下有关位置的函数,position, offset, scrollLeft, scrollTop scrollLeft 如果所选取的包装集不存在,则 ...
- zepto源码--核心方法8(管理包装集)--学习笔记
继续包装集过滤的相关函数的介绍,今天介绍与父元素相关的函数,parent, parents, closest, offsetParent parent 获取对象集合中每个元素的直接父元素. 与上篇文章 ...
- zepto源码--核心方法(类数组相关)--学习笔记
从这篇起,在没有介绍到各类插件之前,后面将陆续介绍zepto对外暴露的核心方法.即$.fn={}里面的所有方法的介绍.会配合zepto的API进行介绍. 其实前面已经介绍了几个,如width,heig ...
- zepto源码--核心方法7(管理包装集)--学习笔记
后面应该会有几篇连续介绍关于zepto包装集的文章.涉及的函数较多,就分别介绍,今天介绍几个使用关系获取包装集的方法.prev, next, first, last, siblings, eq pre ...
- zepto源码--核心方法5(文本操作)--学习笔记
涉及到文本内容的主要有三个函数:html, text, val. 我们已经见过多次,一个函数多种用途的情况,今天这三个函数也不例外,既可以获取内容,也可以设置内容.判断条件就是有没有传入参数,如果没有 ...
- zepto源码--核心方法3(属性相关)--学习笔记
继续$.fn方法 今天主要介绍几个跟属性操作相关的方法attr, removeAttr, prop, data attr 读取或设置dom的属性.如果没有给定value参数,则读取对象集合中第一个元素 ...
- zepto源码--核心方法6(显示隐藏)--学习笔记
在不引入zepto插件模块fx_metho其他ds的情况下,zepto默认的显示隐藏的函数只有show, hide, toggle,这里解释有个前提条件,就是没有引入zepto的fx_methods插 ...
- zepto源码--核心方法2(class相关)--学习笔记
继续上篇,本片主要介绍的是$.fn中与class相关的函数,包括hasClass, addClass, removeClass, toggleClass hasClass: 检查对象集合中是否有元素含 ...
随机推荐
- JS运动基础
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...
- 【原】iOS学习40网络之数据安全
在互联网发展趋势迅猛的今天,数据安全的重要性日趋凸显.也成为我们必须了解的互联网知识. 在移动互联网浪潮下,用户的资金安全.企业的信息安全都是我们实际开发中必须考虑的内容.
- 编程之路 - 写给打算进入IT行业的新人们
IT=挨踢,这是IT人的自嘲,进入IT行业是有四五年了,也算得上是一个“老人”了吧,见了不少新人,面试了不少新人,也带了一些新人,多多少少还是有点发言权的. 关于书本 新人们常常会说我看了多少多少的书 ...
- ccc 碰撞初步
cc.Class({ extends: cc.Component, properties: { }, // use this for initialization onLoad: function ( ...
- Storm和JStorm(阿里的流处理框架)
本文导读: 1.What——JStorm是什么? 1.1 概述 .2优点 .3应用场景 .4JStorm架构 2.Why——为什么启动JStorm项目?(与storm的区别) .1storm的现状.缺 ...
- [ JS 进阶 ] test, exec, match, replace
https://segmentfault.com/a/1190000003497780 对了,这篇文章可能会涉及到正则表达式相关知识,所以推荐没有正则基础的去看看这篇入门文章:正则表达式30分钟入门教 ...
- HTTP协议---HTTP请求中的常用请求字段和HTTP的响应状态码及响应头
http://blog.csdn.net/qxs965266509/article/details/8082810 用于HTTP请求中的常用请求头字段 Accept:用于高速服务器,客户机支持的数据类 ...
- [译]使用Continuous painting mode来分析页面的绘制状态
Chrome Canary(Chrome “金丝雀版本”)目前已经支持Continuous painting mode,用于分析页面性能.这篇文章将会介绍怎么才能页面在绘制过程中找到问题和怎么利用这个 ...
- 翻译-In-Stream Big Data Processing 流式大数据处理
相当长一段时间以来,大数据社区已经普遍认识到了批量数据处理的不足.很多应用都对实时查询和流式处理产生了迫切需求.最近几年,在这个理念的推动下,催生出了一系列解决方案,Twitter Storm,Yah ...
- android-时间选择器和日期选择器
一.实现动态输入日期和时间 * DataPicker(日历选择器) * DataPicker对象以init()方法指定DatePicker初始的年月日及OnDateChangedListener事件 ...