分享别人写的一个小型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 相关文章推荐
动态获取复选框checkbox选中个数的jquery代码
Jun 25 Javascript
JS 获取浏览器和屏幕宽高等信息的实现思路及代码
Jul 31 Javascript
node.js中Socket.IO的进阶使用技巧
Nov 04 Javascript
javascript数组去重的六种方法汇总
Aug 16 Javascript
详谈javascript异步编程
Feb 21 Javascript
JS创建对象几种不同方法详解
Mar 01 Javascript
jQuery UI仿淘宝搜索下拉列表功能
Jan 10 Javascript
浅谈React + Webpack 构建打包优化
Jan 23 Javascript
详解vue-cli下ESlint 配置说明
Sep 03 Javascript
vue进入页面时不在顶部,检测滚动返回顶部按钮问题及解决方法
Oct 30 Javascript
开发Node CLI构建微信小程序脚手架的示例
Mar 27 Javascript
vue+node 实现视频在线播放的实例代码
Oct 19 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编写PDF文档生成器
2006/10/09 PHP
Php 构造函数construct的前下划线是双的_
2009/12/08 PHP
php读取xml实例代码
2010/01/28 PHP
PHP操作XML作为数据库的类
2010/12/19 PHP
ThinkPHP中redirect用法分析
2014/12/05 PHP
深入理解PHP 数组之count 函数
2016/06/13 PHP
PHP+mysql+ajax轻量级聊天室实现方法详解
2016/10/17 PHP
购物车实现的几种方式优缺点对比
2018/05/02 PHP
点图片上一页下一页翻页效果
2008/07/09 Javascript
Javascript中的var_dump函数实现代码
2009/09/07 Javascript
js apply/call/caller/callee/bind使用方法与区别分析
2009/10/28 Javascript
禁止拷贝网页内容的js代码
2014/01/22 Javascript
jQuery选择器源码解读(八):addCombinator函数
2015/03/31 Javascript
JavaScript中String.prototype用法实例
2015/05/20 Javascript
Javascript的表单与验证-非空验证
2016/03/18 Javascript
jQuery实现给input绑定回车事件的方法
2017/02/09 Javascript
JavaScript 中的 this 简单规则
2017/09/19 Javascript
JavaScript实现短暂提示框功能
2018/04/04 Javascript
vue+vue-router转场动画的实例代码
2018/09/01 Javascript
对angularJs中ng-style动态改变样式的实例讲解
2018/09/30 Javascript
vue-cli 3.0 版本与3.0以下版本在搭建项目时的区别详解
2018/12/11 Javascript
elementUi vue el-radio 监听选中变化的实例代码
2019/06/28 Javascript
JavaScript 正则应用详解【模式、欲查、反向引用等】
2020/05/13 Javascript
python访问sqlserver示例
2014/02/10 Python
Python字典操作简明总结
2015/04/13 Python
Python实现发送QQ邮件的封装
2017/07/14 Python
keras导入weights方式
2020/06/12 Python
英国二手物品交易网站:Preloved
2017/10/06 全球购物
英国户外玩具儿童游乐设备网站:TP Toys(蹦床、攀爬框架、秋千、滑梯和游戏屋)
2018/04/09 全球购物
机关财务管理制度
2014/01/17 职场文书
回门宴父母答谢词
2014/01/26 职场文书
《雨点》教学反思
2014/02/12 职场文书
高三家长寄语
2014/04/03 职场文书
2014年中职班主任工作总结
2014/12/16 职场文书
学校学期工作总结
2015/08/13 职场文书
【海涛教你打DOTA】虚空假面第一视角骨弓3房29杀
2022/04/01 DOTA