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: 检查对象集合中是否有元素含 ...
随机推荐
- php访问url的四种方式
1.fopen方式//访问指定URL函数 function access_url($url) { if ($url=='') return false; $fp = fopen($url, 'r') ...
- POJ 3276 (开关问题)
题目链接: http://poj.org/problem?id=3276 题目大意:有一些牛,头要么朝前要么朝后,现在要求确定一个连续反转牛头的区间K,使得所有牛都朝前,且反转次数m尽可能小. 解题思 ...
- overflow-y:auto
overflow-x:auto; overflow-y:auto; X轴和Y轴自适应:
- Android Fragment 生命周期及其API使用(建议使用自定义View替换Fragment)
我为什么不主张使用Fragment Fragment:( Fragment就相当于一个有生命周期的View,它的生命周期被所在的Activity的生命周期管理 ) 生命周期回调说明: onAttach ...
- ACM D的小L
D的小L 时间限制:4000 ms | 内存限制:65535 KB 难度:2 描述 一天TC的匡匡找ACM的小L玩三国杀,但是这会小L忙着哩,不想和匡匡玩但又怕匡匡生气,这时小L给 ...
- git 设置多项目实现多账号登陆
9:45 2015/11/18git 设置多项目时实现多账号用户登陆git config --global user.name "your_name" git config --g ...
- JS:原型
function Box(){ } //使用字面量的方式创建原型对象,这里{}就是对象,是Object, new Object相当于{} Box.prototype = { name:" ...
- GO语言练习:channel 缓冲机制
1.代码 2.运行 3.解析 1.代码 buffer.go package main import ( "fmt" "time" ) func readThre ...
- webservice的Axis2入门教程java版
本文转自百度文库 Axis2是一套崭新的WebService引擎,该版本是对Axis1.x重新设计的产物.Axis2不仅支持SOAP1.1和SOAP1.2,还集成了非常流行的REST WebServi ...
- #nav li:hover ul 与#nav li a:hover ul 的区别
#nav li:hover ul 与#nav li a:hover ul 有什么区别? ──────────────────────────────────────────── #nav li:hov ...