分享别人写的一个小型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 常见对象类创建代码与优缺点分析
Dec 07 Javascript
JQuery onload、ready概念介绍及使用方法
Apr 27 Javascript
为指定的元素添加遮罩层的示例代码
Jan 15 Javascript
javascript面向对象之对象的深入理解
Jan 13 Javascript
jQuery html表格排序插件tablesorter使用方法详解
Feb 10 Javascript
tab栏切换原理
Mar 22 Javascript
JavaScript运动框架 解决防抖动问题、悬浮对联(二)
May 17 Javascript
vue实现登陆登出的实现示例
Sep 15 Javascript
详解使用路由延迟加载 Angular 模块
Oct 12 Javascript
深入浅析Node环境和浏览器的区别
Aug 14 Javascript
前端深入理解Typescript泛型概念
Mar 09 Javascript
JS访问对象两种方式区别解析
Aug 29 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中的file_get_contents获取远程页面乱码的问题
2013/06/25 PHP
PHP+mysql+ajax轻量级聊天室实现方法详解
2016/10/17 PHP
php解析base64数据生成图片的方法
2016/12/06 PHP
PHP实现文件下载【实例分享】
2017/04/28 PHP
翻译整理的jQuery使用查询手册
2007/03/07 Javascript
使用js获取QueryString的方法小结
2010/02/28 Javascript
CSS(js)限制页面显示的文本字符长度
2012/12/27 Javascript
html+js实现动态显示本地时间
2013/09/21 Javascript
jQuery实现等比例缩放大图片让大图片自适应页面布局
2013/10/16 Javascript
JavaScript隐式类型转换
2016/03/15 Javascript
jQuery下拉框的简单应用
2016/06/24 Javascript
javascript数组对象常用api函数小结(连接,插入,删除,反转,排序等)
2016/09/20 Javascript
解决bootstrap中使用modal加载kindeditor时弹出层文本框不能输入的问题
2017/06/05 Javascript
安装vue-cli报错 -4058 的解决方法
2017/10/19 Javascript
JS 中使用Promise 实现红绿灯实例代码(demo)
2017/10/20 Javascript
最新Javascript程序员面试试题和解题方法
2017/11/23 Javascript
vue的无缝滚动组件vue-seamless-scroll实例
2017/12/18 Javascript
angular中两种表单的区别(响应式和模板驱动表单)
2018/12/06 Javascript
微信小程序上传多图到服务器并获取返回的路径
2019/05/05 Javascript
layui form.render('select', 'test2') 更新渲染的方法
2019/09/27 Javascript
ES2020 新特性(种草)
2020/01/12 Javascript
[34:44]Liquid vs TNC Supermajor 胜者组 BO3 第二场 6.4
2018/06/05 DOTA
python实现在每个独立进程中运行一个函数的方法
2015/04/23 Python
详解python中sort排序使用
2019/03/23 Python
详解Ubuntu环境下部署Django+uwsgi+nginx总结
2020/04/02 Python
如何解决cmd运行python提示不是内部命令
2020/07/01 Python
Django-silk性能测试工具安装及使用解析
2020/11/28 Python
python中类与对象之间的关系详解
2020/12/16 Python
HTML5之SVG 2D入门9—蒙板及mask元素介绍与应用
2013/01/30 HTML / CSS
化工专业大学生职业生涯规划书
2014/01/14 职场文书
学习方法演讲稿
2014/05/10 职场文书
家庭财产分割协议范文
2014/11/24 职场文书
2021-4-5课程——SQL Server查询【3】
2021/04/05 SQL Server
js实现模拟购物商城案例
2021/05/18 Javascript
php 文件上传至OSS及删除远程阿里云OSS文件
2021/07/04 PHP
MySQL优化之慢日志查询
2022/06/10 MySQL