摘要: 做前端最痛苦的莫过于兼容问题了,同一样东西,不同浏览器有不同的实现,同一个浏览器不同的版本也有不同的处理。直叫人抓狂。但既然做了前端,就不得不提起耐心,面对这些万恶的兼容。jQuery作为一个目前来讲最流行的JS库,它同样提供了检测各种各样特性的功能,告诉你某个功能该浏览器是否支持,好让你做出进一步的处理。下面,先罗列一下一些问题吧。测试浏览器:IE6,IE7,IE8,IE9,chrome23.0.1271.95,firefox17.0.1,其中IE78是在IE9的文档模式下,不包准确,但jQuery和网上搜到的结果应该可以相信前人的测试是准确的。另,在chrome23这本版本已修复的bug也 阅读全文
posted @ 2012-12-13 21:47 肥杜 阅读(4224) 评论(2) 推荐(0) 编辑
摘要: 关于Deferred对象,建议先看一下阮一峰老师的《jQuery的deferred对象详解》看完之后,相信你对Deferred已经有所了解,如果你还想继续阅读下面的源码,可以先自己看下jQuery.Callbacks,或者先参考我前一篇文章:《学习jQuery.Callbacks》完后再看下面的源码注释,相信你会发现,所谓的Deferred,其实就是构建了2条Callbacks的回调list,如下:var calresolve = $.Callbacks('once memory'), calreject = $.Callbacks('once memory') 阅读全文
posted @ 2012-12-11 15:47 肥杜 阅读(3564) 评论(0) 推荐(2) 编辑
摘要: Callbacks是JQ的一个回调对象,可以用来添加回调,执行回调,删除回调等等。并提供一些参数如once,memory,unique等来进行特殊需求的控制。这里就不举例说明Callbacks的用法了。具体详细说明可以参见:http://api.jquery.com/jQuery.Callbacks/我们学习源码,需先了解如何使用,这里假设我们已经知道如何使用Callbacks了。他的实现思路就是: 构建一个存放回调的数组,如var list = [],通过闭包使这条回调数组保持存在。添加回调时,将回调push进list,执行则遍历list执行回调。看思路貌似很简单,我们就直接来看源码吧,对于 阅读全文
posted @ 2012-12-10 17:25 肥杜 阅读(5618) 评论(8) 推荐(0) 编辑
摘要: querySelector和querySelectorAll能获取以W3C标准规定的CSS选择器方式获取节点和节点集合(array-like)。那么,一个类库的选择器模块假如不需要兼容IE67的话,实现就非常简单了。按照一般类库的使用方式,通常获取节点都是$(selector,context),也就是在context里寻找selector,然后以数组的形式返回。利用querySelectorAll来封装这样的功能,是一件很简单的事情。首先,最简单的,函数的内部实现转换一定是context.querySelectorAll(selector);再将其结果转换为数组,如下面实现:var $ = f 阅读全文
posted @ 2012-10-21 23:07 肥杜 阅读(1043) 评论(0) 推荐(0) 编辑
摘要: contains, 判断节点的包含关系,大部分这类文章都说IE支持contains而FF不支持,FF需要用compareDocumentPosition方法,但据我现在测试,我的FF16已经支持contains了。contains的实现有一个特殊的地方是他自己包含自己也被算是包含,而compareDocumentPosition则不包含自己。故,假设要实现一个考虑充分的contains函数,则如下代码:var contains = function(root, el) { if (root.compareDocumentPosition) return... 阅读全文
posted @ 2012-10-17 01:11 肥杜 阅读(368) 评论(0) 推荐(0) 编辑
摘要: 1.src//html<script type="text/jvascript" src="ooxx.js"></script> //scriptvar script = document.getElementsByTagName('script')[0]; //标准浏览器返回 http://www.ooxx.com/ooxx.js 即返回绝对路径//IE67,src的字符串为什么则返回什么,这里是ooxx.jsalert(script.src); //无兼容问题,均返回src所填字符串,这里为ooxx.jsale 阅读全文
posted @ 2012-10-02 11:31 肥杜 阅读(4899) 评论(0) 推荐(1) 编辑
摘要: 思路:1.调用dom.ready时,先判断下dom是否ready了,如果dom已经ready,则直接执行函数,否则,推入readyList数组等待执行。2.判断domready,标准浏览器下,有document.DOMContentLoaded事件表明domready,而IE下,则通过doScroll来模拟,原理是在IE中,任何DOM元素都有一个doScroll方法。当documentElement可以调用doScroll时,证明dom加载完成了。判断domready的原理如上,但在实际应用中,我看到很多代码都是在进行上面的判断前,先判断document.readyState==='c 阅读全文
posted @ 2012-10-01 17:34 肥杜 阅读(484) 评论(0) 推荐(0) 编辑
摘要: 有时候,加载一些广告的时候,我们用setTimeout实现异步,好让广告不会阻塞我们页面的渲染。为什么setTimeout能够实现异步呢?看一段糟糕的代码:setTimeout(function() { while (true) { }}, 100);setTimeout(function() { alert('你好!');}, 200);setTimeout是异步,那么,不管前面的代码怎么样,他条件满足了就会执行,但上面的代码,由于任务队列里有一个死循环,而后面的弹出代码在队列的后面,循环不息,所以后面的永远不会被执行到。理解setTimeout,我个人认为就是理解浏览器的. 阅读全文
posted @ 2012-07-24 21:13 肥杜 阅读(14805) 评论(1) 推荐(0) 编辑
摘要: 我们知道,Array.prototype.slice.call(arguments)能将具有length属性的对象转成数组,除了IE下的节点集合(因为ie下的dom对象是以com对象的形式实现的,js对象与com对象不能进行转换)如:1 var a={length:2,0:'first',1:'second'};2 Array.prototype.slice.call(a);// ["first", "second"]3 4 var a={length:2};5 Array.prototype.slice.call(a); 阅读全文
posted @ 2012-05-19 10:09 肥杜 阅读(79912) 评论(19) 推荐(31) 编辑
摘要: 阴雨绵绵,这样又冷又湿的日子里,我突然想回顾下刚刚结束不久的2011。 迷茫期 去年今日,我已经在家了,作为即将踏入社会的学生,我跟很多人一样感动彷徨,不安。我不安的是此时此刻,我对于我选择的职业所需要的技能,还不甚了解,而我当初为什么会选择这个方向,一切,要从我实习的时候讲起。 10年的9月,我开始了教育实习,面对着学生在地上滚来滚去,上课说话,不听讲,我唯一能做的就是拿棍子打他们,打到他们痛了,用非常恨的眼神看着我才停止,因为不打痛他们,他们能在我边打的时候边笑,只有打到他们痛了,他们才会安静,我才能讲课。这是很无奈的事,我也更加坚定了我不适合做伟大的人民教师这个工作,我只能另谋出路….. 阅读全文
posted @ 2012-01-15 21:23 肥杜 阅读(461) 评论(2) 推荐(1) 编辑