2010-10-19 updates 今天有网友说下面简化的版本在IE6下会触发IE6的“终止操作”的bug,测试了一下,确实存在这个问题(问题页面),所以对简化版的DOMReady进行了重构了,使用setInterval代替setTimeout就没事了,很奇怪的问题: [javascript] var DOMReady = { ready: function(){ var that = DOMReady,done = false,init,args = arguments; //ready之后统一处理函数 init … 了解更多
对于很多新手来说,cookie的添加、删除、更新等等都是很迷糊的。确实,Cookie里众多的参数让人望而生畏,包括我在内,有时候都会为Cookie这恼人的操作而烦恼。鉴于本人的性格呢,是喜欢化复杂为简单,化抽象为具体的。所以我也就对cookie的一连串的操作进行了封装,而无需为cookie的实际操作而烦恼了,下面是它的一个Example: [javascript] //Example: var cookie = new Cookie("sha", "Hello;; ,sha"); //调用addCookie方法写入cookie cookie.addCookie(); //调用getCookie方法读取cookie alert(cookie.getCookie()); //调用updateCookie方法更新cookie cookie.updateCookie("Update Cookie is successsful.") alert(cookie.getCookie()); … 了解更多
在这里我要介绍一个我早些时间编写的一个封装XML DOM操作的库 CXML。写这个库的原因都是基于对XML DOM操作的繁杂性和重复性,况且不用说它的效率底下了,这是我们都感同身受的。CXML可以操作导入的xml文件以及xml字符串,CXML里提供了四个接口方法:load,toXMLString,getXMLObject,selectNodes。需要指出的一点是,load和selectNodes方法是最强大的部分。当然了,CXML同时还可以跟使用Ajax通过responseXML返回的XML DOM对象结合使用。 load:提供了一个参数,该参数可以一个xml文件的URL,也可以是一段符合xml语法的xml字符串。比如:cxml.load(“supersha24“),或者cxml.load(“http://www.ilovejs.net/xml/test.xml”); toXMLString:该方法带有一个可选择的node节点,返回该节点内的xml字符串,默认是XML DOM实力对象。 getXMLObject:返回XML DOM实力对象。 selectNodes:该方法的参数是一个css形式的selectors,从XML DOM对象中查询节点集合。支持的selectors在下面会有说明。
基于自己对YUI3中on方法的喜爱,忍不住想要去自己实现它,早期本人开发了一个cSelector库,这个库是用来通过selectors来查询DOM的,类似与jQuery的selectors功能。因此,想要实现on的操作方式就非常简单了,首先说明一下YUI中on方法的语法: [javascript] Y.on(type,fn,id,context); [/javascript] id不单止是一个HTML中的id而已,它可以是css2、3中的selectors,组合查询DOM,将查询到的DOM元素添加type驱动事件fn。这种思想非常的不错。也是自己想要去模仿它的原因,一个是实践,另一个也是加深对它的思想的理解。 cSelector库中支持普通的selector,比如: [css] #id .class first-child last-child nth-child > tag only-child *= $= ^= [attr] [/css] … 了解更多
javascrpt里继承的方式很多种,有类式继承和原型继承(权威的解释:Prototypal Inheritance in JavaScript Classical Inheritance in JavaScript)。js没有像java那种只要通过一个extends关键字来声明继承的方式,它的实现方式是比较丑陋的,所以封装这个继承过程就显得尤为重要了。 下面我来说明一种链式封装继承的方式,这种方式需要扩展鼎鼎大名的method和inherits扩展方法。method是douglas crockford通过扩展Function类来方便声明方法从而出名。 [javascript] //首先来实现method扩展方法: Function.prototype.method=function(name,fn){ if(!this.prototype.name){ //验证是否已经存在该方法 this.prototype[name]=fn; } return this; } … 了解更多
在编写javascript的时候,循环是我们经常会进行的操作,尽管目前编写循环的方式多种多样,但是在性能方面还是有区别的,下面我们来看看都有那些循环方式。 第一种:普通的方式,这种方式的性能是比较差的,因为在每次循环的时候都需要计算数组的length一次,在javascript的数组操作中,对length属性的操作的性能是比较慢的,所以尽量在循环内避免使用过多的length操作,包括shift,unshift,pop等等。 [javascript] //假如arr是一个很大的数组 for(var i=0;i<arr.length;i++){ …. } [/javascript] 第二种:缓存数组的length属性,这中方式优化了不少性能,通过一个变量来缓存数组的length,这样每次循环就不需要重复计算数组的length值了。 [javascript] for(var i=0,l=arr.length;i<l;i++){ …. } [/javascript]