Zepto源码笔记(二)
uniq(array)
返回不存在重复值的数组
function classRE(name)
判断classCache中是否已存在name,若存在则取出classCache[name];否则存入该类名的正则表达式至classCache[name]中
function maybeAddPx(name,value)
若name在cssNumber中则返回value;否则返回value+"px"
function defaultDisplay(nodeName)
从elementDisplay中获取该nodeName(即标签类名:a,div,p……)的默认display值;若elementDisplay中不存在nodeName该项,则新建该节点并添加到文档中通过getComputedStyle(element, '').getPropertyValue("display")获取其默认值,若默认为none则设为“block”并存入elementDisplay[nodeName]中
ps:zepto中定义了getComputedStyle=document.defaultView.getComputedStyle
$.each(elements, callback)
若elements是类数组(elements.length 是 number类型),则用for(var i = 0,l=elements.length ; i < l ; i++)来加速循环调用callback
若不是类数组,则使用for in来循环对每个属性调用callback
上述两个循环中一旦callback返回值为false即中断循环
最后返回值均为elements
$.map(elements, callback)
map函数和each函数的优化策略是一样的,只是map返回的是单一对象(elements.length <= 0)或一组数组(elements.length > 0),结果中存放遍历函数的运行结果
zepto.Z(dom, selector)
将dom的原型设为$.fn,以便返回值能调用$.fn的方法
zepto.isZ(object)
判断object的原型是否zepto.Z(zepto.Z.prototype = $.fn)
zepto.init(selector,context)
进入下述其中一条分支,按顺序依次判断
a.若!selector则返回空的zepto collection,也就是zepto.Z()
b.若selector是函数则在DOMContentLoaded后执行
c.若selector已经是Z对象,则返回selector本身
d.若非上述三种情况,则进入下述其中一条分支,按顺序依次判断
d1.若selector是Array,则dom=compact(selector)
d2.若selector是对象:
d21.若isPlainObject(selector)为true,则dom为selector的副本(浅复制)
d22.若isPlainObject(selector)为flase,则dom=selector
令selector = null;
d3.若selector符合fragmentRE(html片段),则dom为根据该片段生成的节点,令selector = null
d4.若存在context,则返回$(context).find(selector),也就是context中的selector节点,此时init函数已经结束
d5.若非上述情况,则dom=zepto.qsa(document, selector),也就是从document中查找符合selector的节点
若符合d1,d2,d3,d5则返回zepto.Z(dom,selector)
zepto.fragment(html, name, properties)
对html进行拓展(若html为"<div/>",则拆分闭合后为"<div></div>")
若name没定义,则通过正则表达式从html中获取name
若name不在containers中,则name = “*”
创建一个container,令其等于containers[name],并使其innerHTML=html;
dom = $.each(slice.call(container.childNodes), function(){
container.removeChild(this)
})
如果isPlainObject(properties)返回true,则另nodes=$(dom),并对nodes设置properties 这3行代码不仅使dom=slice.call(container.childNodes),还清空了container的内容,使container不受污染
最后,返回dom(此时dom是slice.call(container.childNodes), 并不是z集合)
$ = function(selector, context){
return
zepto.init(selector, context)
}
此处不直接使用$=zepto.init是因为要对$进行扩展而不会影响zepto.init
Zepto源码笔记(二)的更多相关文章
- Zepto源码笔记(一)
最近在研究Zepto的源码,这是第一篇分析,欢迎大家继续关注,第一次写源码笔记,希望大家多指点指点,第一篇文章由于首次分析原因不会有太多干货,希望后面的文章能成为各位大大心目中的干货. Zepto是一 ...
- jQuery源码笔记(二):定义了一些变量和函数 jQuery = function(){}
笔记(二)也分为三部分: 一. 介绍: 注释说明:v2.0.3版本.Sizzle选择器.MIT软件许可注释中的#的信息索引.查询地址(英文版)匿名函数自执行:window参数及undefined参数意 ...
- Tomcat8源码笔记(二)Bootstrap启动
TOMCAT源码调试入口是Bootstrap类的main方法,我的启动参数VM: -Dcatalina.home=E:/Tomcat_Source_Code/apache-tomcat-8.0.53- ...
- Zepto源码笔记(三)
ps:本文中"组装成成数组"指的是若元素个数大于1则返回数组,若元素只有1个则返回元素本身 以下函数是$.fn该对象的方法 ready(callback) 通过readyRE正则表 ...
- jQuery源码笔记——二
jQuery选择这样返回对象 var jQuery = function( selector, context ) { return new jQuery.fn.init( selector, con ...
- Tomcat8源码笔记(三)Catalina加载过程
之前介绍过 Catalina加载过程是Bootstrap的load调用的 Tomcat8源码笔记(二)Bootstrap启动 按照Catalina的load过程,大致如下: 接下来一步步分析加载过程 ...
- zepto源码--核心方法10(位置)--学习笔记
今天基本上就是zepto学习笔记的最后一篇了,介绍一下有关位置的函数,position, offset, scrollLeft, scrollTop scrollLeft 如果所选取的包装集不存在,则 ...
- 一个普通的 Zepto 源码分析(二) - ajax 模块
一个普通的 Zepto 源码分析(二) - ajax 模块 普通的路人,普通地瞧.分析时使用的是目前最新 1.2.0 版本. Zepto 可以由许多模块组成,默认包含的模块有 zepto 核心模块,以 ...
- Zepto源码分析(二)奇淫技巧总结
Zepto源码分析(一)核心代码分析 Zepto源码分析(二)奇淫技巧总结 目录 * 前言 * 短路操作符 * 参数重载(参数个数重载) * 参数重载(参数类型重载) * CSS操作 * 获取属性值的 ...
随机推荐
- DEVICE_OBJECT结构参数
typedef struct DECLSPEC_ALIGN(MEMORY_ALLOCATION_ALIGNMENT) _DEVICE_OBJECT { CSHORT Type; USHORT Size ...
- DDMS中File Explorer无法查看data/data文件解决办法
http://www.cnblogs.com/smyhvae/p/3881477.html 找了个连接 问题描述:最近在学习Android SQLite中的SQLiteOpenHelper,使用SQ ...
- css、js的相互阻塞
先决条件:脚本前面存在外部样式 以下试验虽然是在chrome下,但是对于IE8+以及其他浏览器也适用. 1.内联脚本(http://jsbin.com/mudab/1) <!DOCTYPE ht ...
- Javascript url 小逻辑
情况1 : var xhr = new XMLHttpRequest(); xhr.open("GET", "/api/products", true); xh ...
- FMX手机app,如何下载网站图片而不卡界面
你用的版本? 你应该关注下delphi 更新说明第一方法: 可以用线程.第二方法: TNetHTTPClient 已经支持异步 TThread.CreateAnonymousThread( proce ...
- delphi根据进程PID获取程序所在路径的函数(用OpenProcess取得句柄,用GetModuleFileNameEx取得程序名)
uses psapi; {根据进程PID获取程序所在路径的函数}function GetProcessExePath(PID: Cardinal): string;varpHandle: THandl ...
- PHP Simple HTML DOM 使用
下载地址:https://github.com/samacs/simple_html_dom 文档地址 http://simplehtmldom.sourceforge.net/ 一直以来使用php解 ...
- ffdshow 源代码分析1 : 整体结构
ffdshow是一个非常强大的DirectShow解码器,封装了ffmpeg,libmpeg2等解码库.它也提供了丰富的加工处理选项,可以锐化画面,调节画面的亮度等等.不止是视频,FFDShow现在同 ...
- oschina服务器软件
服务器软件 74Apache模块 54Nginx扩展模块 13Radius相关 94PaaS 系统 29服务发现/注册和协调 17Docker 扩展 7Docker 映像 83应用服务器 189HTT ...
- HDU_2032——杨辉三角
Problem Description 还记得中学时候学过的杨辉三角吗?具体的定义这里不再描述,你可以参考以下的图形:11 11 2 11 3 3 11 4 6 4 11 5 10 10 5 1 ...