zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    一分钟明确 VS manifest 原理
    关于“鸡脚神”的看法
    Android中Context具体解释 ---- 你所不知道的Context
    解决android3.0版本号以上应用接收不到开机广播问题
    什么是流利语法Fluent Syntax
    vi 命令 使用方法
    TinyXml高速入门(一)
    reactor设计模式
    ActivityGroup+LinearLayout实现iphone风格的底部tab菜单
    使用ActivityGroup来切换Activity和Layout
  • 原文地址:https://www.cnblogs.com/willkan/p/3229568.html
Copyright © 2011-2022 走看看