摘要: 上一章讲了正则表达式,这一章继续我们的前菜,浏览器兼容性处理。先介绍一个简单的沙盒测试函数。/** * 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 阅读全文
posted @ 2014-03-25 22:12 Suprise 阅读(911) 评论(0) 推荐(1) 编辑
摘要: 看完了上篇,对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 阅读全文
posted @ 2014-03-25 20:06 Suprise 阅读(826) 评论(2) 推荐(1) 编辑
摘要: 最近在啃jQuery1.11源码,上来就遇到Sizzle这个jQuery的大核心,虽然已经清楚了Sizzle的用途,先绕过去也没事,但明知山有虎偏向虎山行才是我们要做的。本文面向的阅读对象:正在学习Sizzle源码或有一定前端基础的同学们,可以一边看源码一边看这些文章进行验证,所以虽然我会分析源码中的正则表达式,有大量的注释,但不会讲正则表达式的基本用法!(我会给出一些链接,但不一定全面,请锻炼自主搜索的能力;为了避免歧义,本文的一些词会采用源码中的英文或js中的属性名)Sizzle部分的代码已经啃完,本系列还有后续,这几天将会一一放出。本文主要分为两个部分:什么是Sizzle、Sizzle的 阅读全文
posted @ 2014-03-25 11:32 Suprise 阅读(1243) 评论(0) 推荐(2) 编辑
摘要: 在啃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,啃 阅读全文
posted @ 2014-03-18 21:38 Suprise 阅读(167) 评论(0) 推荐(0) 编辑
摘要: 花了几个小时写了个API,为了兼容多种用法和测试花了不少时间,求鞭打、嘲笑和建议。 阅读全文
posted @ 2014-03-18 15:59 Suprise 阅读(680) 评论(0) 推荐(0) 编辑
摘要: 虽然以前学过,但是已经忘了,在返秦的火车上看到如此问题,于是思考了一下。C是高级语言,a-(a整除b)*b就不用说了,“整除”是怎么来的?但相对于二进制运算,汇编也算一种“高级”语言,那么我问,“div”是怎么来的?来看一个例子,如果除数的数是2的幂次的话:除数2,二进制为0000 0010,被除数5,二进制为0000 0101。除数-1,即此时除数变为0000 0001,两者进行与操作,结果为0000 0001,余数为1。除数4,二进制为0000 0100,被除数13,二进制为0000 1101。除数-1,即此时除数变为0000 0011,两者进行与操作,结果为0000 0001,余数为1。 阅读全文
posted @ 2013-05-19 13:42 Suprise 阅读(3919) 评论(0) 推荐(0) 编辑
摘要: 本着不重复造轮子的思想,网上能找到的资料我绝对不写。一直没找到什么好的js编辑软件,Notepad缩进都无力,Notepad++和DW自动补全无力,我又不用Linux,用不了Vim,直到有一天用了Sublime Text2,咳咳,刚用的时候发现非常土,遂弃之一边。直到刚才再拿出来摸索,发现要在“查看”菜单里将语法设为html才有高亮和自动补全。但再试用一下,却发现了新的问题。在自动补全html标签时,左边会多出来一个多余的<,例如,我输入<触发自动补全,补全后的样子为<<div></div>如图:解决这个问题有两个方法:锵!第一个是,在写完所有代码后, 阅读全文
posted @ 2013-05-12 13:38 Suprise 阅读(2721) 评论(0) 推荐(0) 编辑
摘要: 一直到第14章结束都没遇到特殊的bug,有两个暂时不那么重要的问题:Atom和邮件发送,不知道为什么rails无法识别who_bought.atom_action.builder文件,回头看英文文档再说,暂时略过。有一个问题值得说一下在rails3.2中,自动生成脚手架的话,app/models/user.rb中有这么一行1 attr_accessible :name, :hashed_password,:salt需在后面加上:password_confirmation和:password两项属性。即attr_accessible :name, :password_confirmation.. 阅读全文
posted @ 2013-03-29 20:22 Suprise 阅读(174) 评论(0) 推荐(0) 编辑
摘要: 身心俱疲,Ajax真是难以吐槽的一章,各种bug,看来咱这本书虽然是2011年的,但已经过时了,回头必须看看有没有新的英文版教材。ajax另一个蛋疼的地方是,我没有找到像以前一样单步调试的方式,也不容易跟踪错误(也许该试试Firebug?),只能看错误log。做好准备,让我们来吧。1,create.js.rjs没有作用原因我也不太清楚,不知道是不是rjs类型的文件过时了。。菜鸟解决方案:1,将app/views/line_items/create.js.rjs文件的后缀名rjs换为erb。2,内容变为$('#cart').html("<%=escape_java 阅读全文
posted @ 2013-03-27 14:06 Suprise 阅读(304) 评论(0) 推荐(0) 编辑
摘要: 虽然没有完全解决,不过根据敏捷的思想,先发此博。想必大家来到第九章了,在写好所有代码后,启动服务器,结果。。会报如下错误Can’t mass-assign protected attributes: product(好吧其实还有其他拼写错误>_<)因为这里不是用户表,攻击者难以获得管理员权限,所以可以采用菜鸟解决方案。菜鸟解决方案:app/model/line_item.rb文件中,加一行attr_accessible :product,:cart即可但这种方式会让你的网站变得易遭受攻击,所以我们得采取其他解决方案。参考http://guides.rubyonrails.org/s 阅读全文
posted @ 2013-03-26 19:54 Suprise 阅读(196) 评论(0) 推荐(0) 编辑