月度归档:2010年08月

编写自己的Javascript库

通过编写自己的Javascript库来提高自己的Javascript水平.

今天先实现两个方法,以后边学习边编写.

(function (){
window[‘SoftLin’]={}
//等同于document.getElementById()
//实现了多叁数
function $(){
var elements=new Array();
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;
}
window[‘SoftLin’][‘$’]=$;
//获许指定标签下Class名
function getElementsByClassName(className,tag){
var allTags=document.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[‘SoftLin’][‘getElementsByClassName’]=getElementsByClassName;
//向DOM节点添加事件
function addEvent(node,type,listener){
if(!(node=$(node)))
return false;
if(node.addEventListener){
node.addEventListener(type,listener,false);
return true;
}else if(node.attachEvent){
node[‘e’+type+listener]=listener;
node[type+listener]=function(){node[‘e’+type+listener](window.event);}
node.attachEvent(‘on’+type,node[type+listener]);
return true;
}
return false;
};
window[‘SoftLin’][‘addEvent’]=addEvent;
//向DOM节点后面添加节点
function insertAfter(){
}
//删除多个子节点
function removerChiildren(){
}

//将方法绑定到指定对象上
function bindFunction(obj,func){
return function(){
func.apply(obj,arguments);
}
}
window[‘SoftLin’][‘bindFunction’]=bindFunction;

//获取浏览器大小
function getBrowserWindowSize(){
var de=document.documentElement;
return{
‘width’:(
window.innerWidth || (de && de.clientWidth) || document.body.clientWidth),
‘height’:(
window.innerHeight || (de && de.clientHeight) || document.body.clientHeight)
}
};
window[‘SoftLin’][‘getBrowserWindowSize’]=getBrowserWindowSize;
//nodeType常量 字面量方法定义
window[‘SoftLin’][‘node’]={
ELEMENT_NODE:1,
ATTRIBUTE_NODE:2,
TEXT_NODE:3,
CDATE_SECTION_NODE:4,
ENTITY_REFERENCE_NODE:5,
ENTITY_NODE:6,
PROCESSING_INSTRUCTION_NODE:7,
COMMENT_NODE:8,
DOCUMENT_NODE:9,
DOCUMENT_TYPE_NODE:10,
DOCUMENT_FRAGMENT_NODE:11,
NOTATION_NODE:12
}
//遍历节点
function walkElementsLisner(func,node){
var root=node||window.document;
var nodes=root.getElementsByTagName(‘*’);
for(var i=0;i<nodes.length;i++){
func.call(nodes[i]);
}
};
window[‘SoftLin’][‘walkElementsLisner’]=walkElementsLisner;

//返回节点的深度
function walkTheDOMRecursive(func,node,depth,returnFromParent){
var root=node||window.document;
var returnFromParent=func.call(node,depth++,returnFromParent);
var node=root.firstChild;
while(node){
walkTheDOMRecursive(func,node,depth,returnFromParent);
node=node.nextSibling;
}
};
window[‘SoftLin’][‘walkTheDOMRecursive’]=walkTheDOMRecursive;
//遍历节点的属性
function walkTheDOMWithAttirubutes(node,func,depth,returnFromParent){
var root=node||window.document;
returnFromParent=func.call(root,depth++,returnFromParent);
if(root.attributes){
for(var i=0;i<root.attributes.length;i++){
walkTheDOMWithAttirubutes(root.attributes[i],func,depth-1,returnFromParent);

}
}
if(root.nodeType!=SoftLin.node.ATTRIBUTE_NODE){
node=root.firstChild;
while(node){
walkTheDOMWithAttirubutes(node,func,depth,returnFromParent);
node=node.nextSibling;
}
}
}
window[‘SoftLin’][‘walkTheDOMWithAttirubutes’]=walkTheDOMWithAttirubutes;

})();