• 编写自己的Javascript库1


    通过编写自己的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;
     
    })();

                    2010年8月31日2点16分

  • 相关阅读:
    Codeforces Round #455 (Div. 2) A. Generate Login【贪心】
    Codeforces Round #315 (Div. 2)【贪心/重排去掉大于n的元素和替换重复的元素】
    CSU-ACM2018寒假集训选拔-入门题
    Codeforces Round #454 C. Shockers【模拟/hash】
    Nowcoder Girl 参考题解【待写】
    2017吉首大学新生赛
    P1450 包裹快递 RP+14【二分】
    NewCode
    2017年浙江工业大学大学生程序设计迎新赛决赛题解
    Codeforces Round #451 (Div. 2) B. Proper Nutrition【枚举/扩展欧几里得/给你n问有没有两个非负整数x,y满足x·a + y·b = n】
  • 原文地址:https://www.cnblogs.com/softlin/p/1813263.html
Copyright © 2020-2023  润新知