03 2014 档案
摘要:前两天发现知乎收藏夹中的答案正在不断减少。。看来需要保存一下了,但之前别人的方式是用chrome插件(浏览器无法自动保存本地文件)+wget前后端配合来完成这个工作的,而且还有一些缺点(比如保存的html无法更名),十分麻烦,所以打算用后端程序来抓一下网页,最终还是选择了Node来实现,是因为想借此机会学习一下Node。结果:好端端的异步编程被窝写成了同步编程。。这次就放同步编程的代码好了,下次再放异步的。。(而且发现在一个月前就有人用python和c#实现了一个足够好的版本。。一下就没动力了)废话少说,放代码。(Node的基本知识不用我说了吧)//自己用的小品代码,所以没有拆成多个模块,而是
阅读全文
摘要:最近在啃jQuery的源码,估计会啃到很多浏览器兼容性的问题,所以整理一下1,IE下的内存泄露.在IE中不在DOM树中的独立节点有javascript变量引用它的时候不会被回收。解决:手动将该js变量置为null2,IE= 011,delete DOM元素上的自定义属性时,IE<9会报错,具体规则如...
阅读全文
摘要:在上一章中,我们说到在之前的查找阶段我们已经获得了待选集seed,那么这一章我们就来讲如何将seed待选集过滤,以获得我们最终要用的元素。其实思路本质上还是不停地根据token过滤,但compile这个函数将这些matcher(filter生成的闭包过滤函数)给编译成一个函数(这个效率和我们直接使用过滤函数差不多,关键是在后面),再保存这一个函数,以后遇到同样的selector就可以不用再编译,直接调用就可以了。接下来我们看看compile的代码compile = Sizzle.compile = function( selector, group /* Internal Use Only *
阅读全文
摘要:在用前两篇讲述完正则表达式、初始化、特性检测之后,终于到了我们的正餐——Sizzle工厂函数!Sizzle工厂函数有四个参数,selector:选择符context:查找上下文results:返回的结果数组seed:待选元素,刚开始是undefined,但有的情况下Sizzle会递归调用,故那个时候会将待选元素层层传递当我们要使用Sizzle时,使用频率最高的通常是直接指定单个id、class、tag来获取(通常还指定查找上下文来加速这一过程),而这种情况下Sizzle做了优化,当判断是这三种情况时,直接调用原生API来获取元素。其次,最快的方法莫过于使用querySelectorAll了,也
阅读全文
摘要:上一章讲了正则表达式,这一章继续我们的前菜,浏览器兼容性处理。先介绍一个简单的沙盒测试函数。/** * Support testing using an element * @param {Function} fn Passed the created div and expects a boolean result *///特性检测的一个技巧,造一个div,最后将其删掉,提供一种简单的沙盒(如果该div不加入到DOM树上,则部分属性如currentStyle会没有)function assert( fn ) { var div = document.createElement("d
阅读全文
摘要:看完了上篇,对Sizzle有了一个大致的了解,我们接下来就可以正式开始啃Sizzle的源码了。上来就讲matcher难度太大,先来点开胃菜,讲讲Sizzle中的各个正则表达式的作用吧(本来还想讲初始化的,篇幅太长了,留待下篇吧)。友情提醒:阅读本文请先学习正则表达式,至少对捕获组以及js的正则API(exec,match,test,字符串转正则)有一定的了解这是前面一堆变量声明和函数声明。var Sizzle =/*! * Sizzle CSS Selector Engine v1.10.16 * http://sizzlejs.com/ * * Copyright 2013 jQuery F
阅读全文
摘要:最近在啃jQuery1.11源码,上来就遇到Sizzle这个jQuery的大核心,虽然已经清楚了Sizzle的用途,先绕过去也没事,但明知山有虎偏向虎山行才是我们要做的。本文面向的阅读对象:正在学习Sizzle源码或有一定前端基础的同学们,可以一边看源码一边看这些文章进行验证,所以虽然我会分析源码中的正则表达式,有大量的注释,但不会讲正则表达式的基本用法!(我会给出一些链接,但不一定全面,请锻炼自主搜索的能力;为了避免歧义,本文的一些词会采用源码中的英文或js中的属性名)Sizzle部分的代码已经啃完,本系列还有后续,这几天将会一一放出。本文主要分为两个部分:什么是Sizzle、Sizzle的
阅读全文
摘要:在啃Sizzle源码,被几个正则表达式给难住了,写了一下正则demo,记录一下1,按照定义[]和(?:)里的内容不计入捕获组的数目2,捕获组的计数顺序是,从大到小,同级从左到右例如 var reg = /(((1)(2)3)4)/;reg.exec('1234')的捕获组结果为$1='1234',$2='123',$3='1',$4='2'3,当某个正则判断中出现空白符时,可用whitespace = "[\\x20\\t\\r\\n\\f]"先声明一下,后面再组合的时候读起来会轻松不少。4,啃
阅读全文
摘要:花了几个小时写了个API,为了兼容多种用法和测试花了不少时间,求鞭打、嘲笑和建议。
阅读全文

浙公网安备 33010602011771号