分享别人写的一个小型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 相关文章推荐
JavaScript语法着色引擎(demo及打包文件下载)
Jun 13 Javascript
javascript 操作cookies及正确使用cookies的属性
Oct 15 Javascript
javascript 拖放效果实现代码
Jan 22 Javascript
JavaScript基础知识之数据类型
Aug 06 Javascript
js document.write()使用介绍
Feb 21 Javascript
QQ空间顶部折页撕开效果示例代码
Jun 15 Javascript
最流行的Node.js精简型和全栈型开发框架介绍
Feb 26 Javascript
JavaScript禁止复制与粘贴的实现代码
May 16 Javascript
jQuery简单动画变换效果实例分析
Jul 04 Javascript
详解Vue中过度动画效果应用
May 25 Javascript
webpack+vuex+axios 跨域请求数据的示例代码
Mar 06 Javascript
红黑树的插入详解及Javascript实现方法示例
Mar 26 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
安健A254立体声随身听的分析与打磨
2021/03/02 无线电
PHP学习之PHP运算符
2006/10/09 PHP
php数组函数序列之end() - 移动数组内部指针到最后一个元素,并返回该元素的值
2011/10/31 PHP
php使用array_rand()函数从数组中随机选择一个或多个元素
2014/04/28 PHP
php获取网页中图片、DIV内容的简单方法
2014/06/19 PHP
PHP实现的比较完善的购物车类
2014/12/02 PHP
PHP中strpos、strstr和stripos、stristr函数分析
2016/06/11 PHP
Thinkphp5结合layer弹窗定制操作结果页面
2017/07/07 PHP
原生JS实现Ajax通过POST方式与PHP进行交互的方法示例
2018/05/12 PHP
thinkPHP5框架接口写法简单示例
2019/08/05 PHP
javascript显示隐藏层比较不错的方法分析
2008/09/30 Javascript
javascript操作excel生成报表示例
2014/05/08 Javascript
JavaScript中rem布局在react中的应用
2015/12/09 Javascript
CascadeView级联组件实现思路详解(分离思想和单链表)
2016/04/12 Javascript
浅析javascript异步执行函数导致的变量变化问题解决思路
2016/05/13 Javascript
JavaScript String 对象常用方法详解
2016/05/13 Javascript
整理关于Bootstrap警示框的慕课笔记
2017/03/29 Javascript
简介JavaScript错误处理机制
2020/08/04 Javascript
[55:04]海涛DOTA2死魂复燃6.82版本介绍
2014/09/28 DOTA
python脚本监控Tomcat服务器的方法
2018/07/06 Python
python实现鸢尾花三种聚类算法(K-means,AGNES,DBScan)
2019/06/27 Python
Django实现基于类的分页功能
2019/10/31 Python
Python使用shutil模块实现文件拷贝
2020/07/31 Python
html5 postMessage解决跨域、跨窗口消息传递方案
2016/12/20 HTML / CSS
欧洲著名的珠宝和手表网上商城:uhrcenter
2017/04/10 全球购物
一些.net面试题
2014/10/06 面试题
机电一体化专业应届生求职信
2013/11/27 职场文书
秋季运动会活动方案
2014/02/05 职场文书
国庆节标语大全
2014/10/08 职场文书
大学生上课迟到检讨书
2014/10/15 职场文书
教师党员自我评价范文
2015/03/04 职场文书
小学少先队活动总结
2015/05/08 职场文书
Python jiaba库的使用详解
2021/11/23 Python
漫画「你在春天醒来」第10卷封面公开
2022/03/21 日漫
Python用tkinter实现自定义记事本的方法详解
2022/03/31 Python
CSS文本阴影 text-shadow 悬停效果详解
2022/05/25 HTML / CSS