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 ...
随机推荐
- http://blog.csdn.net/liuqinstudy/article/details/8281498
http://blog.csdn.net/liuqinstudy/article/details/8281498
- JavaScript,一个超级简单的方法判断浏览器的内核前缀
先说明,此处的方法是说超级简单的方法,不是指代码超级少,而是用非常简单的知识点,只要懂得怎么写JavaScript的行内样式就可以判断. 大家应该还记得JavaScript行内样式怎么写吧?(看来我是 ...
- 【BZOJ】1087: [SCOI2005]互不侵犯King(状压dp)
http://www.lydsy.com:808/JudgeOnline/problem.php?id=1087 状压dp是第一次写啊,我也是才学TAT.状压dp一般都用一个值表示集合作为dp的一个状 ...
- Contest Hunter Round #70 - 连续两大交易事件杯省选模拟赛
orz lydrainbowcat [Problem A]「艦これ市」70万幕后交易事件 排序机器=-=.重要的是相同的处理. 我们可以从小到大添加数字,然后维护一个位置的序列.每一种相等的数字都在一 ...
- Mysql_mysql多个TimeStamp设置
timestamp设置默认值是Default CURRENT_TIMESTAMP timestamp设置随着表变化而自动更新是ON UPDATE CURRENT_TIMESTAMP 但是由于 一个表中 ...
- [FlyCapture2] Bumblebee XB3 Save Images to Three AVI Files (Left, Center and Right) 大黄蜂立体相机保存捕获的视频到左中右三个不同的文件
PointGreyResearch是世界领先的致力于开发高级数字相机产品的公司.PointGrey产品涉及IEEE-1394相机.立体视觉相机和360度全景数字视频相机.其中二代和三代的大黄蜂立体相机 ...
- rsync服务器的配置和使用
yum install -y rsyncuseradd rsync -s /sbin/nologinmkdir /backupmkdir /backup1 chown rsync:rsync /bac ...
- VirtIE6
VirtIE6--能在win7上直接运行的单文件 http://down.iefans.net/VirtIE6.rar
- PHP Execute Command Bypass Disable_functions
先简单说一下php调用mail()函数的过程. 看到源码ext/mail.c 236行: char *sendmail_path = INI_STR("sendmail_path" ...
- Grunt - 前端开发所见即所得
首先要安装全局的grunt-cli sudo npm install grunt-cli -g 1,项目中初始化npm文件,项目名不要和[关键词]如grunt重复,一直回车即可 npm init 2, ...