02 2012 档案
摘要:个人觉得这个例子虽然可能不具有实际意义,但是可以很好的理解Sizzle选择的过程实例说明先看一个例子:<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html><head> <meta http-equiv="Content-Type" content="text/html; charset
阅读全文
摘要:元素过滤是Sizzle中最复杂的一部分基本形式Sizzle.filter = function( expr, set, inplace, not ) {}expr 过滤表达式set 候选集合inplace 是否原地修改not 是否取补集说明:set传递的是一个集合(数组),如果inplace为true,set会被修改;not的作用是用来取补集。还是用个例子来说明下:<li id="a1" class="test"></li><li id="a2" class="test"><
阅读全文
摘要:查找的入口对应的是Sizzle.find方法,Sizzle.find = function( expr, context) {}expr :查找的表达式context :查找的范围find的步骤第一步:判断主要集合,方法说过了,依次匹配,顺序就是ID --> NAME --> TAG第二步:(1)当有类型被匹配时,调用相应的方法,获取集合set。(2)当ID,NAME,TAG全部不匹配时,获取context范围内的全部元素集合set第三步:去除expr中已经匹配的部分,返回结果{expr : expr,set : set}因此,Sizzle.find的大致代码流程是Sizzle.f
阅读全文
摘要:主要流程与正则表达式分块var chunker = /((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g;这个正则比较长,主要是用来分块和一步预处理。1、2、3、4、'div#test + p > a.tab' --> ['div#test','+
阅读全文
摘要:大家都知道,Sizzle是jQuery的御用选择器引擎,是jQuery作者John Resig写的DOM选择器引擎,速度号称业界第一。另外,Sizzle是独立的一部分,不依赖任何库,如果你不想用jQuery,可 以只用Sizzle。所以单独拿出来特别对待。在Prototype1.7中,选择器也采用了Sizzle,不过版本有点老,所以我去Sizzle网站搞了一份新的 下来,于是下面分析的时候使用的是最新版的Sizzle.js预先说明在分析初期为了保证各个浏览器的结果一致,不考虑原生getElementsByClass以及querySelectorAll的影响,同时忽略XML类型,因此作一下处..
阅读全文
摘要:简述 $方法是 Prototype 的基础,和jquery中的$作用差不多,不过功能却弱了很多。因为Prototype中还有一个$$方法,看名字就知道,和$相比,$$加了一倍的钱,功能肯定就丰富撒。本文主要是剖析$方法,1.7版本的$$方法使用的是Sizzle引擎,比较复杂,是后面的事情。基本原理 $方法其实比较简单,平时在个人的代码中见得也比较多。基本原理就是如果传入的是一个字符串,就执行document.getElementById方法,如果是一个DOM元素,就直接返回传入的元素,代码实现:function _$(element){ if(typeof element == ...
阅读全文
摘要:Date比较好理解,理解清楚了Number对象的toPaddedString方法就可以了。只有两个方法(toJSON和toISOString),而且这两个方法还一样,就是将日期转换为 JSON 字符串(遵循 ISO 格式)。代码很短,我直接贴上来: (function(proto) { function toISOString() { return this.getUTCFullYear() + '-' + (this.getUTCMonth() + 1).toPaddedString(2) + '-' + this.getUT...
阅读全文
摘要:今天看Sizzle代码的时候,里面有这么一段:// Here we check if the JavaScript engine is using some sort of// optimization where it does not always call our comparision// function. If that is the case, discard the hasDuplicate value.// Thus far that includes Google Chrome.[0, 0].sort(function() { baseHasDuplicate =...
阅读全文

浙公网安备 33010602011771号