You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
// `$.zepto.fragment` takes a html string and an optional tag name// to generate DOM nodes from the given html string.// The generated DOM nodes are returned as an array.// This function can be overridden in plugins for example to make// it compatible with browsers that don't support the DOM fully.// // 我特意留着英文注释给你们看, generate DOM nodes from the given html string.// zepto.fragment=function(html,name,properties){vardom,nodes,container// 如果是简单标签,=> <div></div>, <br />// 直接创建一个节点if(singleTagRE.test(html))dom=$(document.createElement(RegExp.$1))if(!dom){if(html.replace)html=html.replace(tagExpanderRE,"<$1></$2>")if(name===undefined)name=fragmentRE.test(html)&&RegExp.$1if(!(nameincontainers))name='*'container=containers[name]container.innerHTML=''+htmldom=$.each(slice.call(container.childNodes),function(){container.removeChild(this)})}if(isPlainObject(properties)){nodes=$(dom)$.each(properties,function(key,value){if(methodAttributes.indexOf(key)>-1)nodes[key](value)elsenodes.attr(key,value)})}returndom}
按照国际惯例,来个未完待续...
The text was updated successfully, but these errors were encountered:
本文基于 http://zeptojs.com/zepto.js v1.2.0 解读。
Zepto的
$()
如同狗皮膏药,啥东西往里面一放都能给你整出一点用法。我们最常用的莫过于通过它来选择、创建元素了。$('.class')
,$('p')
,$('#id')
,$('[type="text"]')
,$('<div>new element</div>')
这么写个用法。那么Zepto是如何通过传递进来的值来识别需求,让我们一起走进Zepto的内心世界,层层解剖,看一看Zepto的心到底是不是黑的。
毫无疑问,
$()
是一个接受参数的函数定义,查看源码得知:就是返回另一个函数
zepto.init()
的执行结果。很明显咧,这根本看不出啥,只能接着看zepto.init()
的定义:通过
$()
我们晓得这货需要一个执行结果,来看看这货返回了什么。代码被我精简了一下, 看到的又是返回另一个函数zepto.Z()
的执行结果。我走过最长的路,就是你的套路,这调用都是一层又一层啊。只能接着往下看了:...套路差不多要完了吧。还好,到这里我们终于知道了,这货返回了一个对象。既然都是套路,我们用套路的想法理解下, 构造函数
Z()
, 应该会给对象提供一些初始的属性或方法,(构造函数之所以是一个构造函数,一般来说咧需要给对象实例提供一些成员属性和方法,才能成为一个构造函数,要不空的构造函数,直接继承Object
好了), 查看下Z()
的定义:很简单咯, 就是添加
this.length
,this.selector
, 一个节点对应一个成员属性(this[i] = dom[i]
)一轮下来,我们知道了调用
$()
最终得到了一个对象,对象有 2 + n (有多少节点就有多少个n) 个属性。归根到底咧,$()
就是通过参数取得节点信息。现在跟随镜头让我们重新走入zepto.init()
的内心,看看它是怎么撩到node节点的芳心。这里是处理html 片段时间。我累了,有空再补上一行一行的注释
按照国际惯例,来个未完待续...
The text was updated successfully, but these errors were encountered: