分享别人写的一个小型js框架


Posted in Javascript onAugust 13, 2007

主要是集成了常用的扩展,包括Dom与String、Array、StringBuffer、NameSpace等,当然还少不了Ajax。体积约8k。因为严格控制体积,所以功能有限。如果只要Ajax部分,就1k而已。

这个小框架已经应用到公司的项目,并开始逐步在前端展示页面上接替prototype.js。以后将围绕这个框架做一些应用。

/* 
*    My JavaScript Framework 
*    Version    :    1.0 beta 
*    Author    :    misshjn 
*    Email    :    misshjn@163.com 
*/ 
function NameSpace(){}; 
function StringBuffer(){this.data = []}; var Method = { 
    Version : "1.0 beta", 
    Element    : function(){ 
        this.version = Method.Version; 
        this.hide = function(){this.style.display="none"; return this}; 
        this.show = function(){this.style.display=""; return this}; 
        this.getStyle = function(s){ 
            var value = this.style[s.camelize()]; 
            if (!value){ 
                if (this.currentStyle) { 
                    value = this.currentStyle[s.camelize()]; 
                }else if (document.defaultView && document.defaultView.getComputedStyle) { 
                    var css = document.defaultView.getComputedStyle(this, null); 
                    value = css ? css.getPropertyValue(s) : null; 
                } 
            } 
            return value; 
        }; 
        this.setStyle = function(s){ 
            var sList = s.split(";"); 
            for (var i=0,j; j=sList[i]; i++){ 
                var k = j.split(":"); 
                this.style[k[0].trim().camelize()] = k[1].trim(); 
            } 
            return this; 
        }; 
        this.toggle = function(){this.getStyle("display")=="none"?this.setStyle("display:"):this.setStyle("display:none"); return this}; 
        this.hasClassName = function(c){return this.className.hasSubString(c," ")?true:false;}; 
        this.addClassName = function(c){if(!this.hasClassName(c)){this.className+=" "+c};return this}; 
        this.removeClassName = function(c){if(this.hasClassName(c)){this.className = (" "+this.className+" ").replace(" "+c+" "," ").trim(); return this}}; 
        this.getElementsByClassName = function(c){return this.getElementsByAttribute("className",c)}; 
        this.getElementsByAttribute = function(n,v){ //name,value; 
            var elems = this.getElementsByTagName("*"); 
            var elemList = []; 
            for (var i=0,j; j=elems[i]; i++){ 
                var att = j[n] || j.getAttribute(n); 
                if (att==v){ 
                    elemList.push(j); 
                } 
            } 
            return elemList; 
        }; 
        this.parentIndex = function(p){ 
            if (this==p){return 0}             
            for (var i=0,n=this; n=n.parentNode; i++){ 
                if(n==p){return i;} 
                if(n==document.documentElement) return -1; 
            } 
        } 
        this.nextElement = function(){ 
            var n = this; 
            for (var i=0,n; n = n.nextSibling; i++){ 
                if(n.nodeType==1) return $(n); 
            } 
            return null; 
        }; 
        this.previousElement = function(){ 
            var n = this; 
            for (var i=0,n; n = n.previousSibling; i++){ 
                if(n.nodeType==1) return $(n); 
            } 
            return null; 
        }; 
        this.moveAhead = function(){ 
            if (this.previousElement()){ 
                this.parentNode.insertBefore(this,this.previousElement()); 
            } 
            return this; 
        }; 
        this.moveBack = function(){ 
            var n = this.nextElement(); 
            if (n){ 
                this.parentNode.removeChild(n); 
                this.parentNode.insertBefore(n,this); 
            } 
            return this; 
        }; 
    }, 
    Array :    function(){ 
        this.indexOf = function(){ 
            for (i=0; i<this.length; i++){ 
                if (this[i]==arguments[0]) 
                    return i; 
            } 
            return -1; 
         }; 
        this.lastIndexOf = function(){ 
            for (i=this.length-1; i>=0; i--){ 
                if (this[i]==arguments[0]) 
                    return i; 
            } 
            return -1; 
        }; 
        this.each = function(fn){ 
            for (var i=0,len=this.length; i<len; i++){ 
                fn(this[i]); 
            } 
            return this; 
        }; 
    }, 
    String : function(){ 
        this.trim = function(){ 
            var _re,_argument = arguments[0] || " "; 
            typeof(_argument)=="string"?(_argument == " "?_re = /(^\s*)|(\s*$)/g : _re = new RegExp("(^"+_argument+"*)|("+_argument+"*$)","g")) : _re = _argument; 
            return this.replace(_re,""); 
        }; 
        this.ltrim = function(){ 
            var _re, _argument = arguments[0] || " "; 
            typeof(_argument)=="string"?(_argument == " "?_re = /(^\s*)/g : _re = new RegExp("(^"+_argument+"*)","g")) : _re = _argument; 
            return this.replace(_re,""); 
        }; 
        this.rtrim = function(){ 
            var _re, _argument = arguments[0] || " "; 
            typeof(_argument)=="string"?(_argument == " "?_re = /(\s*$)/g : _re = new RegExp("("+_argument+"*$)","g")) : _re = _argument; 
            return this.replace(_re,""); 
        }; 
        this.concat = function(){ 
            var s = new StringBuffer(); 
            s.append(this); 
            for (var i=0,j; j=arguments[i]; i++){ 
                s.append(typeof j=="object" ? j.join("") : j); 
            } 
            return s.toString(); 
        }; 
        this.stripTags = function(){ 
            return this.replace(/<\/?[^>]+>/gi, ''); 
        }; 
        this.cint = function(){ 
            return this.replace(/\D/g,"")-0; 
        }; 
        this.camelize = function(){ 
            return this.replace(/(-\S)/g,function($1){return $1.toUpperCase().substring(1,2)}) 
        }; 
        this.hasSubString = function(s,f){ 
            if(!f) f=""; 
            var v = (f+this+f).indexOf(f+s+f); 
            return v==-1?false:v; 
        }; 
        this.toXMLString = function(){ 
            var arr = arguments[0].split("&"); 
            var str = new StringBuffer(); 
            for (var i=0,len=arr.length; i<len; i++){ 
                var item = arr[i].split("="); 
                str.append("<"+item[0]+"><![CDATA["+item[1]+"]]></"+item[0]+">"); 
            } 
            return str.toString(); 
        }; 
        this.URLEncode = function(){ return encodeURIComponent(this)}; 
        this.URLDecode = function(){ return decodeURIComponent(this)}; 
    }, 
    StringBuffer : function(){ 
        this.append = function(){this.data.push(arguments[0]);return this}; 
        this.toString = function(){return this.data.join(arguments[0]||"")}; 
        this.length = function(){return this.data.length}; 
    }, 
    NameSpace : function(){ 
        this.copyChild = this.appendChild = function(ns){ 
            for (var key in ns){ 
                this[key] = ns[key]; 
            } 
            return this; 
        }; 
    } 
}; 
Method.Array.apply(Array.prototype); 
Method.String.apply(String.prototype); 
Method.StringBuffer.apply(StringBuffer.prototype); 
Method.NameSpace.apply(NameSpace.prototype); 
function $(){ 
    var elem = typeof(arguments[0])=="string"?document.getElementById(arguments[0]):arguments[0]; 
    if (!elem){return null} 
    if (elem["version"]){return elem} 
    if ( arguments[1] == undefined || arguments[1]==true ){Method.Element.apply(elem);} 
    return elem; 
}; 
$(document); 
var Ajax={ 
    xmlhttp:function (){ 
        try{ 
            return new ActiveXObject('Msxml2.XMLHTTP'); 
        }catch(e){ 
            try{ 
                return new ActiveXObject('Microsoft.XMLHTTP'); 
            }catch(e){ 
                return new XMLHttpRequest(); 
            } 
        } 
    } 
}; 
Ajax.Request=function (){ 
    if(arguments.length<2)return ; 
    var para = {asynchronous:true,method:"GET",parameters:""}; 
    for (var key in arguments[1]){ 
        para[key] = arguments[1][key]; 
    } 
    var _x=Ajax.xmlhttp(); 
    var _url=arguments[0]; 
    if(para["parameters"].length>0) para["parameters"]+='&_='; 
    if(para["method"].toUpperCase()=="GET") _url+=(_url.match(/\?/)?'&':'?')+para["parameters"]; 
    _x.open(para["method"].toUpperCase(),_url,para["asynchronous"]); 
    _x.onreadystatechange=function (){ 
        if(_x.readyState==4){ 
            if(_x.status==200) 
                para["onComplete"]?para["onComplete"](_x):""; 
            else{ 
                para["onError"]?para["onError"](_x):""; 
            } 
        } 
    }; 
    if(para["method"].toUpperCase()=="POST")_x.setRequestHeader("Content-Type","application/x-www-form-urlencoded"); 
    for (var ReqHeader in para["setRequestHeader"]){ 
        _x.setRequestHeader(ReqHeader,para["setRequestHeader"][ReqHeader]); 
    } 
    _x.send(para["method"].toUpperCase()=="POST"?(para["postBody"]?para["postBody"]:para["parameters"]):null); 
}; 
var Cookies = { 
    get : function(n){ 
        var dc = "; "+document.cookie+"; "; 
        var coo = dc.indexOf("; "+n+"="); 
        if (coo!=-1){ 
            var s = dc.substring(coo+n.length+3,dc.length); 
            return unescape(s.substring(0, s.indexOf("; "))); 
        }else{ 
            return null; 
        } 
    }, 
    set : function(name,value,expires){ 
        var expDays = expires*24*60*60*1000; 
        var expDate = new Date(); 
        expDate.setTime(expDate.getTime()+expDays); 
        var expString = expires ? "; expires="+expDate.toGMTString() : ""; 
        var pathString = ";path=/"; 
        document.cookie = name + "=" + escape(value) + expString + pathString; 
    }, 
    del : function(n){ 
        var exp = new Date(); 
        exp.setTime(exp.getTime() - 1); 
        var cval=this.get(n); 
        if(cval!=null) document.cookie= n + "="+cval+";expires="+exp.toGMTString(); 
    } 
} 

function $A(list){ 
    var arr = []; 
    for (var i=0,len=list.length; i<len; i++){ 
        arr[i] = list[i]; 
    } 
    return arr; 
} 
function $D(str){return str.URLDecode();} 
function $E(str){return str.URLEncode();} 
function $V(id){return $(id).value} 
function request(paras){ 
    var url = location.href; 
    var paraString = "&"+url.substring(url.indexOf("?")+1,url.length)+"&"; 
    if (paraString.indexOf("&"+paras+"=")==-1){return ""}; 
    paraString = paraString.substring(paraString.indexOf("&"+paras+"=")+paras.length+2,paraString.length); 
    return paraString.substring(0,paraString.indexOf("&")); 
}
Javascript 相关文章推荐
动态加载js文件 document.createElement
Oct 14 Javascript
实例讲解JQuery中this和$(this)区别
Dec 08 Javascript
js实现照片墙功能实例
Feb 05 Javascript
JavaScript 里的类数组对象
Apr 08 Javascript
批量下载对路网图片并生成html的实现方法
Jun 07 Javascript
js中scrollTop()方法和scroll()方法用法示例
Oct 03 Javascript
浅析script标签中的defer与async属性
Nov 30 Javascript
ReactNative页面跳转Navigator实现的示例代码
Aug 02 Javascript
在vue中添加Echarts图表的基本使用教程
Nov 22 Javascript
js中Generator函数的深入讲解
Apr 07 Javascript
vue使用axios上传文件(FormData)的方法
Apr 14 Javascript
解决vue v-for src 图片路径问题 404
Nov 12 Javascript
javascript下查找父节点的简单方法
Aug 13 #Javascript
根据地区不同显示时间的javascript代码
Aug 13 #Javascript
解决使用attachEvent函数时,this指向被绑定的元素的问题的方法
Aug 13 #Javascript
Track Image Loading效果代码分析
Aug 13 #Javascript
不错的JS中变量相关的细节分析
Aug 13 #Javascript
javascript-TreeView父子联动效果保持节点状态一致
Aug 12 #Javascript
TopList标签和JavaScript结合两例
Aug 12 #Javascript
You might like
php printf输出格式使用说明
2010/12/05 PHP
PHP和Mysqlweb应用开发核心技术-第1部分 Php基础-2 php语言介绍
2011/07/03 PHP
Javascript 通过json自动生成Dom的代码
2010/04/01 Javascript
jquery 查找iframe父级页面元素的实现代码
2011/08/28 Javascript
利用cookie记住背景颜色示例代码
2013/11/04 Javascript
用js正确判断用户名cookie是否存在的方法
2014/01/28 Javascript
JS案例分享之金额小写转大写
2014/05/15 Javascript
使用js dom和jquery分别实现简单增删改
2014/09/11 Javascript
基于jquery实现的仿优酷图片轮播特效代码
2016/01/13 Javascript
基于JavaScript实现 网页切出 网站title变化代码
2016/04/03 Javascript
javascript创建含数字字母的随机字符串方法总结
2016/08/01 Javascript
JavaScript实战之带收放动画效果的导航菜单
2016/08/16 Javascript
JavaScript Date 知识浅析
2017/01/29 Javascript
Vue.js简易安装和快速入门(第二课)
2017/10/17 Javascript
Vue下的国际化处理方法
2017/12/18 Javascript
vue v-model实现自定义样式多选与单选功能
2018/07/05 Javascript
基于js实现的图片拖拽排序源码实例
2020/11/04 Javascript
[02:35]DOTA2英雄基础教程 末日使者
2013/12/04 DOTA
浅析Python中的join()方法的使用
2015/05/19 Python
详解Python核心对象类型字符串
2018/02/11 Python
对python3新增的byte类型详解
2018/12/04 Python
利用Python求阴影部分的面积实例代码
2018/12/05 Python
使用Python横向合并excel文件的实例
2018/12/11 Python
谈谈Python中的while循环语句
2019/03/10 Python
OpenCV+Python--RGB转HSI的实现
2019/11/27 Python
Flask-SocketIO服务端安装及使用代码示例
2020/11/26 Python
基于Python-Pycharm实现的猴子摘桃小游戏(源代码)
2021/02/20 Python
POS解决方案:MUNBYN(热敏打印机、条形码扫描仪)
2020/06/09 全球购物
MySQL面试题目集锦
2016/04/14 面试题
公司员工的自我评价范例
2013/11/01 职场文书
店长助理岗位职责
2013/12/13 职场文书
学生安全责任书
2014/04/15 职场文书
党风廉设责任书
2014/04/16 职场文书
公司领导班子四风对照检查材料
2014/09/27 职场文书
2015年销售助理工作总结
2015/05/11 职场文书
pandas中pd.groupby()的用法详解
2022/06/16 Python