zepto源码阅读第一天

zepto github地址:git@github.com:madrobby/zepto.git

看到目录结构后,找到 src/zepto.js

1、代码结构:

var Zepto = (function() {...})()

window.Zepto = Zepto
window.$ === undefined && (window.$ = Zepto)

这里使用 IDE 折叠代码可以清楚的看到整个代码结构。如果项目中 $ 符被占用,可以使用Zepto来调用。

2、代码入口:

$ = function(selector, context){
   return zepto.init(selector, context)
}

平时项目中都是通过 $(xx) 的方式调用的。看来这里是调用了 init 函数,那再看看init函数里是什么吧?

3、zepto.init 函数:

  zepto.init = function(selector, context) {
    var dom
    // 如果selector为空,就返回一个空的Zepto对象
    if (!selector) return zepto.Z()
    // 判断selector是否是字符串
    else if (typeof selector == 'string') {
	  // 过滤空白字符
      selector = selector.trim()
      // 如果是一个html片段,就创建一个Dom节点
      // 注意: 在谷歌21和火狐15版本的浏览器中,如果html片断不是以'<'开始会报异常
      if (selector[0] == '<' && fragmentRE.test(selector))
        dom = zepto.fragment(selector, RegExp.$1, context), selector = null
      // 如果传了上下文的参数,会先创建一个上下文集合,然后在这个集合内去寻找selector节点
      else if (context !== undefined) return $(context).find(selector)
      // 如果是CSS选择器,直接调用原生querySelectorAll去寻找节点(当然qsa方法里面做了很多东西,先这样理解)
      else dom = zepto.qsa(document, selector)
    }
    // 如果传入的是一个方法,则调用Dom ready的方法
    else if (isFunction(selector)) return $(document).ready(selector)
    // 如果本身传入的就是一个Zepto对象,就直接返回这个对象
    else if (zepto.isZ(selector)) return selector
    else {
      // 如果传入的selector是一个节点数组,就格式化下数组,清除里面的空对象
      if (isArray(selector)) dom = compact(selector)
      // 如果传入是一个对象,就把它包成一个数组
      else if (isObject(selector))
        dom = [selector], selector = null
      // 下面的操作和上面的类似,就不多说了
      else if (fragmentRE.test(selector))
        dom = zepto.fragment(selector.trim(), RegExp.$1, context), selector = null
      else if (context !== undefined) return $(context).find(selector)
      else dom = zepto.qsa(document, selector)
    }
    // 最后将生成的Dom和选择器传入Z函数
    return zepto.Z(dom, selector)
  }

接下来就要看看 zepto.Z 函数里面发生了什么。期待。

在 zepto.init 函数中用很多工具方法,都很有意思。比如 fragment、qsa、compact 等。以后再细细展开,今天就先到这啦。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值