首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > JavaScript >

十个最常用的JavaScript自定义函数

2012-10-24 
10个最常用的JavaScript自定义函数?? ?? ?? ?handlers[0] element[on + type]? ??? ???}? ?? }? ?? /

10个最常用的JavaScript自定义函数

?? ?? ?? ?handlers[0] = element["on" + type];? ?
?? ???}? ?
? }? ?
? //将事件处理函数存入哈希表? ?
? handlers[handler.$guid] = handler;? ?
? //指派一个全局的事件处理函数来做所有的工作? ?
? element["on" + type] = handleEvent;? ?
}; ?
//用来创建唯一的ID的计数器 ?
addEvent.guid = 1; ?
function removeEvent(element, type, handler) { ?
? //从哈希表中删除事件处理函数? ?
? if (element.events && element.events[type]) {? ?
?? ???delete element.events[type][handler.$guid];? ?
? }? ?
}; ?
function handleEvent(event) { ?
? var returnValue = true;? ?
? //抓获事件对象(IE使用全局事件对象)? ?
? event = event || fixEvent(window.event);? ?
? //取得事件处理函数的哈希表的引用? ?
? var handlers = this.events[event.type];? ?
? //执行每一个处理函数? ?
? for (var i in handlers) {? ?
?? ? this.$handleEvent = handlers[i];? ?
?? ???if (this.$handleEvent(event) === false) {? ?
?? ?? ???returnValue = false;? ?
?? ???}? ???}? ?
? return returnValue;? ?
}; ?
//为IE的事件对象添加一些“缺失的”函数 ?
function fixEvent(event) { ?
? //添加标准的W3C方法? ?
? event.preventDefault = fixEvent.preventDefault;? ?
? event.stopPropagation = fixEvent.stopPropagation;? ?
? return event;? ?
}; ?
fixEvent.preventDefault = function() { ?
? this.returnValue = false;? ?
}; ?
fixEvent.stopPropagation = function() { ?
? this.cancelBubble = true;? ?
};

功能非常强悍,解决IE的this指向?? ???elements = (tag === "*" && node.all)? node.all : node.getElementsByTagName(tag),? ?
?? ???patterns = [],? ?
?? ???returnElements = [],? ?
?? ???current,? ?
?? ???match;? ?
?? ???var i = classes.length;? ?
?? ???while(--i >= 0){? ?
?? ?? ?? ?patterns.push(new RegExp("(^|\\s)" + classes[i] + "(\\s|$)"));? ?
?? ???}? ?
?? ???var j = elements.length;? ?
?? ???while(--j >= 0){? ?
?? ?? ?? ?current = elements[j];? ?
?? ?? ?? ?match = false;? ?
?? ?? ?? ?for(var k=0, kl=patterns.length; k??
?? ?? ?? ?? ? match = patterns[k].test(current.className);? ?
?? ?? ?? ?? ? if (!match)??break;? ?
?? ?? ?? ?}? ?
?? ?? ?? ?if (match)??returnElements.push(current);? ?
?? ???}? ?
?? ???return returnElements;? ?
? }? ?
}

(7)cssQuery()

别名为getElementsBySeletor,由Dean Edwards最先实现,Prototype.js,JQuery等类库都有相应实现,其中JQuery把它整合到$()选择器中,名声盖过其前辈。不过 IE8等新锐浏览器已经实现querySelector与querySelectorAll方法,待到IE6与IE7报废之日,它就无用了。无忧里有它的实现原理讲解。由于太长,就不粘出来了,具体可到原作者网站看看。

(6)toggle()

用来显示或隐藏一个DOM元素。

? var len = start + name.length + 1;? ?
? if ( ( !start ) && ( name != document.cookie.substring( 0, name.length ) ) ) {? ?
?? ???return null;? ?
? }? ?
? if ( start == -1 ) return null;? ?
? var end = document.cookie.indexOf( ';', len );? ?
? if ( end == -1 ) end = document.cookie.length;? ?
? return unescape( document.cookie.substring( len, end ) );? ?
} ?
function setCookie( name, value, expires, path, domain, secure ) { ?
? var today = new Date();? ?
? today.setTime( today.getTime() );? ?
? if ( expires ) {? ?
?? ???expires = expires * 1000 * 60 * 60 * 24;? ?
? }? ?
? var expires_date = new Date( today.getTime() + (expires) );? ?
? document.cookie = name+'='+escape( value ) +? ?
?? ???( ( expires ) ? ';expires='+expires_date.toGMTString() : '' ) + //expires.toGMTString()? ?
?? ???( ( path ) ? ';path=' + path : '' ) +? ?
?? ???( ( domain ) ? ';domain=' + domain : '' ) +? ?
?? ???( ( secure ) ? ';secure' : '' );? ?
} ?
function deleteCookie( name, path, domain ) { ?
? if ( getCookie( name ) ) document.cookie = name + '=' +? ?
?? ?? ?? ?( ( path ) ? ';path=' + path : '') +? ?
?? ?? ?? ?( ( domain ) ? ';domain=' + domain : '' ) +? ?
?? ?? ?? ?';expires=Thu, 01-Jan-1970 00:00:01 GMT';? ?
}

(2)getStyle()与setStyle()

所有UI控件都应该存在的函数,动态设置样式与获取样式。这个可以写得很短,也可以写得很长,但要精确取得样式,一个字:难!但我发现许多问题都是发端于IE,???//IE7 bug:filter 滤镜要求 hasLayout=true 方可执行(否则没有效果)? ?
???if (!el.currentStyle || !el.currentStyle.hasLayout) el.style.zoom = 1;? ?
???prop = "filter";? ?
???if(!!window.XDomainRequest){? ?
?? ? value ="progid:DXImageTransform.Microsoft.Alpha(style=0,opacity="+value*100+")";? ?
???}else{? ?
?? ? value ="alpha(opacity="+value*100+")"
???}? ?
?}? ?
?el.style.cssText += ';' + (prop+":"+value);? ?
} ?
function getStyle(el, style){ ?
?if(!+"\v1"){? ?
???style = style.replace(/\-(\w)/g, function(all, letter){? ?
?? ? return letter.toUpperCase();? ?
???});? ?
???return el.currentStyle[style];? ?
?}else{? ?
???return document.defaultView.getComputedStyle(el, null).getPropertyValue(style)? ?
?}? ?
}

有关setStyle还可以看我另一篇博文,毕竟现在设置的样式都是内联样式,与html混杂在一起。

(1)$()

实至名归,最值钱的函数,可以节省多少流量啊。最先由Prototype.js实现的,那个洪荒时代遗留下来的珍兽,现在有许多变种。

    function $() { ?
    ? var elements = [];? ?
    ? for (var i = 0; i < arguments.length; i++) {? ?
    ?? ???var element = arguments[i];? ?
    ?? ???if (typeof element == 'string')? ?
    ?? ?? ?? ?element = document.getElementById(element);? ?
    ?? ???if (arguments.length == 1)? ?
    ?? ?? ?? ?return element;? ?
    ?? ???elements.push(element);? ?
    ? }? ?
    ? return elements;? ?
    }

热点排行