伪命名空间的使用.
在javascript2.0广泛使用之前,这里说的"命名空间"都不是真正的. 只是在脚本内营造一个属于自己的小空间的小技巧而已.
如果你的使用了Prototype库, 同时你又自己写了一个 function $(){} 函数 , 你的$函数就会与 Prototype库的$函数重名,所以我们要使用命名空间, 而且是伪命名空间.
例如:
(function(){//代码})();
//代码 处的代码,不能被外面访问,这就是自己的小空间了.
开始写自己的库
只有架子, 没写实现,以后会补全的,这里只是写一个写库的思想
(function
(){
//ADS命名空间 Advanced DOM Scripting
if(! window.ADS)
{
window.ADS= {};
}
//确定浏览器是否与整个库兼容
//例子 alert(ADS.getEvent());
function isCompatible(other){}
window.ADS.isCompatible= isCompatible;
//取得元素
//例子 ADS.$('bu1','bu2')
function $(){}
window.ADS.$= $;
//添加事件
//例子 ADS.addEvent(window,'load',test6);
function addEvent(node,type_,listener){}
window.ADS.addEvent= addEvent;
//删除事件
//例子 ADS.removeEvent(window,'load',test6);
function removeEvent(node,type,listener){}
window.ADS.removeEvent= removeEvent;
function getElementsByClassName(className,tag,parent){}
window.ADS.getElementsByClassName= getElementsByClassName;
function toggleDisplay(node,value){}
window.ADS.toggleDisplay= toggleDisplay;
function removeChild(parent){}
window.ADS.removeChild= removeChild;
function prependChild(parent,newChild){}
window.ADS.prependChild= prependChild;
// 获得事件对象
function getEvent(){}
window.ADS.getEvent= getEvent;
})();
//ADS命名空间 Advanced DOM Scripting
if(! window.ADS)
{
window.ADS= {};
}
//确定浏览器是否与整个库兼容
//例子 alert(ADS.getEvent());
function isCompatible(other){}
window.ADS.isCompatible= isCompatible;
//取得元素
//例子 ADS.$('bu1','bu2')
function $(){}
window.ADS.$= $;
//添加事件
//例子 ADS.addEvent(window,'load',test6);
function addEvent(node,type_,listener){}
window.ADS.addEvent= addEvent;
//删除事件
//例子 ADS.removeEvent(window,'load',test6);
function removeEvent(node,type,listener){}
window.ADS.removeEvent= removeEvent;
function getElementsByClassName(className,tag,parent){}
window.ADS.getElementsByClassName= getElementsByClassName;
function toggleDisplay(node,value){}
window.ADS.toggleDisplay= toggleDisplay;
function removeChild(parent){}
window.ADS.removeChild= removeChild;
function prependChild(parent,newChild){}
window.ADS.prependChild= prependChild;
// 获得事件对象
function getEvent(){}
window.ADS.getEvent= getEvent;
})();
下面是写了实现的 库, ADS.js
/*
*
* @author 赵磊 2009-04-25
*/
(function (){
//ADS命名空间 Advanced DOM Scripting
if(! window.ADS)
{
window.ADS= {};
}
//确定浏览器是否与整个库兼容
//例子 alert(ADS.getEvent());
function isCompatible(other){
if(other===false
||! Array.prototype.push
||! Object.hasOwnProperty
||! document.createElement
||! document.getElementsByTagName
){
return false ;
}
return true ;
}
window.ADS.isCompatible= isCompatible;
//依据id取得元素
//例子 ADS.$('bu1','bu2')
function $(){
var elements=new Array();
//查找作为参数提供的所有元素
for(var i=0;i<arguments.length;i++ )
{
var element= arguments[i];
//如果该参数是一个字符串,假设它是一个id
if(typeof element=='string' )
{
element= document.getElementById(element);
}
//如果只提供了一个参数,则立即返回这个元素
if(arguments.length==1 )
{
return element;
}
//否则将它添加进数组
elements.push(element);
}
//返回包含多个被请求元素的数组
return elements;
}
window.ADS.$= $;
//添加事件
//例子 ADS.addEvent(window,'load',test6);
// ADS.addEvent(window,'load',test5);
//可以为一个对象添加多个事件
function addEvent(node,type_,listener){
//检查兼容性
if(!isCompatible()){return false ;}
if(!(node=$(node))){return false ;}
if (node.addEventListener)
{
//W3C的方法
node.addEventListener(type_,listener,false );
return true ;
}else if (node.attachEvent)
{
//MS IE的方法
node['e'+type_]= listener;
node[type_]=function ()
{
node['e'+ type_](window.event);
}
node.attachEvent('on'+ type_,node[type_]);
return true ;
}
//若两种方法都不具备
return false ;
}
window.ADS.addEvent= addEvent;
//删除事件
//例子 ADS.removeEvent(window,'load',test6);
function removeEvent(node,type,listener){
if(!(node=$(node))) {return false ;}
if (node.removeEventListener)
{
//W3C的方法
node.removeEventListener(type,listener,false );
return true ;
}
else if (node.detachEvent)
{
// MS IE 的方法
node.detachEvent('on'+ type,node[type]);
node[type]=null ;
return true ;
}
//若两种方法都不具备
return false ;
}
window.ADS.removeEvent= removeEvent;
//依据className 查找元素(集合)
//例子 ADS.getElementsByClassName("className","*",document);
//返回 数组
function getElementsByClassName(className,tag,parent){
parent=parent|| documetn;
if(!(parent=$(parent))){return false ;}
//查找所有匹配的标签
var allTags=(tag=="*"&&parent.all)? parent.all:parent.getElementsByTagName(tag);
var matchingElements=new Array();
//创建一个正则表达示
className=className.replace(/\-/g,"\\-" );
var regex=new RegExp("(^|\\s)"+className+"(\\s|$)" );
var element;
for(var i=0;i<allTags.length;i++ )
{
element= allTags[i];
if (regex.test(element.className)){
matchingElements.push(element);
}
}
return matchingElements;
}
window.ADS.getElementsByClassName= getElementsByClassName;
//反复隐显
//例子 ADS.toggleDisplay('id');
// ADS.toggleDisplay('id','block');
function toggleDisplay(node,value){
if(!(node=$(node))){return flase;}
if(node.style.display!='none' ){
node.style.display='none' ;
}else {
node.style.display=value||'' ;
}
return true ;
}
window.ADS.toggleDisplay= toggleDisplay;
//在指定元素后面插入一个元素
//ADS.insertAfter("bu1","bu8")
//ADS.insertAfter(ADS.$("bu1"),ADS.$("bu8"))
function insertAfter(node,referenceNode){
if(!(node=$(node))){return false ;}
if(!(referenceNode=$(referenceNode))){return false ;}
return referenceNode.parentNode.insertBefore(node,referenceNode.nextSibling);
}
window.ADS.insertAfter= insertAfter;
//删除指定元素的所有子元素
function removeChild(parent){
if(!(parent=$(parent))) return false ;
while (parent.firstChild){
parent.firstChild.parentNode.removeChild(parent.firstChild);
}
return parent;
}
window.ADS.removeChild= removeChild;
//给指定节点添加子节点, 添加在已有子节点的前面
//
function prependChild(parent,newChild){
if(!(parent=$(parent))) return false ;
if(!(newChild=$(newChild))) return false ;
if (parent.firstChild)
{
//如果存在一个 子节点,则在这个节点之前插入
parent.insertBefore(newChild,parent.firstChild)
}else {
//如果没有子节点,则直接插入
parent.appendChild(newChild);
}
return parent;
}
window.ADS.prependChild= prependChild;
// 获得事件对象
function getEvent(){
if (window.event)
{
return window.event;
}
var f= getEvent.caller;
while(f!=null )
{
var e = f.arguments[0 ];
if(e && (e.constructor==MouseEvent||e.constructor==Event||e.constructor==KeyboardEvent)) return e;
f= f.caller;
}
}
window.ADS.getEvent= getEvent;
})();
* @author 赵磊 2009-04-25
*/
(function (){
//ADS命名空间 Advanced DOM Scripting
if(! window.ADS)
{
window.ADS= {};
}
//确定浏览器是否与整个库兼容
//例子 alert(ADS.getEvent());
function isCompatible(other){
if(other===false
||! Array.prototype.push
||! Object.hasOwnProperty
||! document.createElement
||! document.getElementsByTagName
){
return false ;
}
return true ;
}
window.ADS.isCompatible= isCompatible;
//依据id取得元素
//例子 ADS.$('bu1','bu2')
function $(){
var elements=new Array();
//查找作为参数提供的所有元素
for(var i=0;i<arguments.length;i++ )
{
var element= arguments[i];
//如果该参数是一个字符串,假设它是一个id
if(typeof element=='string' )
{
element= document.getElementById(element);
}
//如果只提供了一个参数,则立即返回这个元素
if(arguments.length==1 )
{
return element;
}
//否则将它添加进数组
elements.push(element);
}
//返回包含多个被请求元素的数组
return elements;
}
window.ADS.$= $;
//添加事件
//例子 ADS.addEvent(window,'load',test6);
// ADS.addEvent(window,'load',test5);
//可以为一个对象添加多个事件
function addEvent(node,type_,listener){
//检查兼容性
if(!isCompatible()){return false ;}
if(!(node=$(node))){return false ;}
if (node.addEventListener)
{
//W3C的方法
node.addEventListener(type_,listener,false );
return true ;
}else if (node.attachEvent)
{
//MS IE的方法
node['e'+type_]= listener;
node[type_]=function ()
{
node['e'+ type_](window.event);
}
node.attachEvent('on'+ type_,node[type_]);
return true ;
}
//若两种方法都不具备
return false ;
}
window.ADS.addEvent= addEvent;
//删除事件
//例子 ADS.removeEvent(window,'load',test6);
function removeEvent(node,type,listener){
if(!(node=$(node))) {return false ;}
if (node.removeEventListener)
{
//W3C的方法
node.removeEventListener(type,listener,false );
return true ;
}
else if (node.detachEvent)
{
// MS IE 的方法
node.detachEvent('on'+ type,node[type]);
node[type]=null ;
return true ;
}
//若两种方法都不具备
return false ;
}
window.ADS.removeEvent= removeEvent;
//依据className 查找元素(集合)
//例子 ADS.getElementsByClassName("className","*",document);
//返回 数组
function getElementsByClassName(className,tag,parent){
parent=parent|| documetn;
if(!(parent=$(parent))){return false ;}
//查找所有匹配的标签
var allTags=(tag=="*"&&parent.all)? parent.all:parent.getElementsByTagName(tag);
var matchingElements=new Array();
//创建一个正则表达示
className=className.replace(/\-/g,"\\-" );
var regex=new RegExp("(^|\\s)"+className+"(\\s|$)" );
var element;
for(var i=0;i<allTags.length;i++ )
{
element= allTags[i];
if (regex.test(element.className)){
matchingElements.push(element);
}
}
return matchingElements;
}
window.ADS.getElementsByClassName= getElementsByClassName;
//反复隐显
//例子 ADS.toggleDisplay('id');
// ADS.toggleDisplay('id','block');
function toggleDisplay(node,value){
if(!(node=$(node))){return flase;}
if(node.style.display!='none' ){
node.style.display='none' ;
}else {
node.style.display=value||'' ;
}
return true ;
}
window.ADS.toggleDisplay= toggleDisplay;
//在指定元素后面插入一个元素
//ADS.insertAfter("bu1","bu8")
//ADS.insertAfter(ADS.$("bu1"),ADS.$("bu8"))
function insertAfter(node,referenceNode){
if(!(node=$(node))){return false ;}
if(!(referenceNode=$(referenceNode))){return false ;}
return referenceNode.parentNode.insertBefore(node,referenceNode.nextSibling);
}
window.ADS.insertAfter= insertAfter;
//删除指定元素的所有子元素
function removeChild(parent){
if(!(parent=$(parent))) return false ;
while (parent.firstChild){
parent.firstChild.parentNode.removeChild(parent.firstChild);
}
return parent;
}
window.ADS.removeChild= removeChild;
//给指定节点添加子节点, 添加在已有子节点的前面
//
function prependChild(parent,newChild){
if(!(parent=$(parent))) return false ;
if(!(newChild=$(newChild))) return false ;
if (parent.firstChild)
{
//如果存在一个 子节点,则在这个节点之前插入
parent.insertBefore(newChild,parent.firstChild)
}else {
//如果没有子节点,则直接插入
parent.appendChild(newChild);
}
return parent;
}
window.ADS.prependChild= prependChild;
// 获得事件对象
function getEvent(){
if (window.event)
{
return window.event;
}
var f= getEvent.caller;
while(f!=null )
{
var e = f.arguments[0 ];
if(e && (e.constructor==MouseEvent||e.constructor==Event||e.constructor==KeyboardEvent)) return e;
f= f.caller;
}
}
window.ADS.getEvent= getEvent;
})();
转自: http://elf8848.javaeye.com/blog/374788