zepto源码--init--学习笔记
先展示init函数,由于笔记本屏幕太小,删掉了部分源码注释,才能在一屏内截图。

当我们调用$()的时候,便会直接调用zepto.init()生成zepto对象,跟jquery生成jquery对象类似。可以在插件中进行覆盖。

定义变量dom
分为5种情况,逐个进行判断。
1、未传入选择器,即没有传入任何参数的情况,直接返回一个空的zepto对象。

2、如果传入字符串类型的选择器,即传入的是css选择器

清除selector参数的前后空格,selector = selector.trim()
然后区分三种不同情况下的字符串选择器:
a). 文档片段,如$('<div></div>'),则调用zepto.fragment()函数创建dom对象,并赋值给变量dom,关于zepto.fragment(),见上文。
b). 如果存在上下文,则在上下文内查找符合条件的dom元素
c). 传入常规css选择器的情况,调用zepto选择器方法zepto.qsa(document, selector)查找符合条件的dom元素,赋值给变量dom。关于 zepto.qsa(),后面会分析到。
3、如果selector参数传入的是函数的情况,直接返回$(document).ready()方法,只有一种情况$(function(){})

4、如果传入的参数本身就是zepto对象,则直接返回其自身。

举个传入zepto对象作为参数的例子:

5、不是上述4种情况的其他:
对此也需要分开讨论
a). 如果选择器是以节点数组形式传递,过滤null、undefined,赋值给变量dom

b). 传入的参数类型就是object ,将其以数组形式赋值给变量dom

c). 预防用户以new String()方式输入html文档片段

在某些情况下,用户可能使用如下方式输入

d). 这两天依然属于预防机制,不需要更多解释

将查询结果转换成zepto对象并返回,return zepto.Z(dom, selector)。
zepto源码--init--学习笔记的更多相关文章
- zepto 源码 $.contains 学习笔记
$.contains(parent,node) 返回值为一个布尔值 ==> boolean parent,node我们需要检查的节点检查父节点是否包含给定的dom节点,如果两者是相同的节点,返 ...
- zepto源码--fragment--学习笔记
文档片段fragment函数默认传递三个参数: html文档片段字符串 name标签 properties额外添加的属性 函数内部实现过程: var dom, nodes, container; 中间 ...
- c++ stl源码剖析学习笔记(一)uninitialized_copy()函数
template <class InputIterator, class ForwardIterator>inline ForwardIterator uninitialized_copy ...
- zepto源码--qsa--学习笔记
zepto内部选择器qsa方法的实现. 简述实现原理: 通过判断传入的参数类型: 如果是'#id',则使用getElementById(id)来获取元素,并且将结果包装成数组形式: 如果是'.clas ...
- zepto源码--extend--学习笔记
对象继承函数: $.extend(){},默认传递一个参数,需要继承的对象目标.函数展示: 最终实现的过程,需要调用工具函数extend,首先分析extend函数. 默认传递三个参数,继承的目标对象- ...
- zepto源码--matches--学习笔记
zepto的第一个函数,zepto.matches: 作用:用来匹配dom元素是否匹配某css selector. 它为后面的一些高级方法的实现提供了基础支持,比如事件代理,parent, close ...
- requests源码阅读学习笔记
0:此文并不想拆requests的功能,目的仅仅只是让自己以后写的代码更pythonic.可能会涉及到一部分requests的功能模块,但全看心情. 1.另一种类的初始化方式 class Reques ...
- c++ stl源码剖析学习笔记(二)iterator
ITERATOR 迭代器 template<class InputIterator,class T> InputIterator find(InputIterator first,Inpu ...
- c++ stl源码剖析学习笔记(三)容器 vector
stl中容器有很多种 最简单的应该算是vector 一个空间连续的数组 他的构造函数有多个 以其中 template<typename T> vector(size_type n,cons ...
随机推荐
- windows 服务安装脚本拾遗
转自:http://blog.csdn.net/susubuhui/article/details/7881096 1.安装脚本 echo 请按任意键开始安装客户管理平台的后台服务 echo. pau ...
- RectAnimation用于在DrawingVisual画进度条
使用Visual来画图,可以使用其派生类,UIElement.Viewport3DVisual用于呈现3D内容,其他可以用来画图的为DrawingVisual,使用DrawingVisual可以使用编 ...
- BZOJ1807 : [Ioi2007]Pairs 彼此能听得见的动物对数
一维的情况: 排序后维护一个单调指针即可,时间复杂度$O(n\log n)$. 二维的情况: 旋转坐标系后转化为二维数点问题,扫描线+树状数组维护即可,时间复杂度$O(n\log n)$. 三维的情况 ...
- BZOJ4155 : [Ipsc2015]Humble Captains
第一问最小割,第二问: 设du[i]表示i点的度数,则要最小化$\frac{|1集合的du[i]之和-2集合的du[i]之和|}{2}$, 压位01背包即可. #include<cstdio&g ...
- 一个spring jdbc实例
一.使用示例 (1)springJdbcContext.xml <?xml version="1.0" encoding="UTF-8"?> < ...
- C#并行编程--命令式数据并行(Parallel.Invoke)---与匿名函数一起理解(转载整理)
命令式数据并行 Visual C# 2010和.NETFramework4.0提供了很多令人激动的新特性,这些特性是为应对多核处理器和多处理器的复杂性设计的.然而,因为他们包括了完整的新的特性,开 ...
- 用Git进行协同开发
用Git进行协同开发 问题场景描述 常常会遇到这样的协同场景:后台的同事和前端的同事需要共同开发一个新功能,而他们的代码相互依赖,所以需要不停地更新各自的代码进行联调. 对于这种场景,最简单的方式就是 ...
- Odoo Entypo Regular Icon List
参考地址: http://www.fontslog.com/entypo-regular-otf-33800.htm#custompreview 或 http://www.w3cplus.com/w3 ...
- 简单查看tomcat中部署java服务的内存使用情况
vim tomcat_mem.sh NAME=$1 #部署项目名称 #PID=`ps -ef|grep tomcat|grep $NAME|awk '{print $2}'` PID=`ps -ef| ...
- [转载]VC6中的文件后缀
VC文件扩展名 .APS:存放二进制资源的中间文件,VC把当前资源文件转换成二进制格式,并存放在APS文件中,以加快资源装载速度. .BMP:位图资源文件. .BSC:浏览信息文件,由浏览信息维护工具 ...