欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

发布一个最新版coos核心代码

程序员文章站 2022-07-14 20:18:07
...

发布一个最新版coos核心代码

完整版本请到google code开源项目上下载

google.code网址:http://code.google.com/p/coos/

 

coos.js

/**
 * @author zdz8207
 * 通用面向对象脚本库
 * @version 1.0
 * 
 */
var coos = function(){this.version = "1.0";};

/**
 * 创建对象和方法的通用函数,兼容多种浏览器,实现高效、方便的继承体系,解决多种常规创建的性能问题
 * @param parantObj jsonObj
 * @example 
 * var Person = coos.Class      //默认派生自object基本类
({
    Create: function(name, age)
    {
        this.base();    //调用上层构造函数
        this.name = name;
        this.age = age;
    },
    SayHello: function()
    {
        alert("Hello, I'm " + this.name + ", " + this.age + " years old.");
    },
    toString: function()    //覆写toString方法
    {
        return this.name;
    }
});

var Employee = coos.Class(Person,    //派生自Person类
{
    Create: function(name, age, salary)
    {
        this.base(name, age);  //调用基类的构造函数
        this.salary = salary;
    },
    ShowMeTheMoney: function()
    {
        alert(this + " $" + this.salary); //这里直接引用this将隐式调用toString()
    }
});
var BillGates = new Person("Bill Gates", 53);
var SteveJobs = new Employee("Steve Jobs", 53, 1234);
alert(BillGates);   //这里将隐式调用覆写后的toString()方法
BillGates.SayHello();
SteveJobs.SayHello();
SteveJobs.ShowMeTheMoney();

var LittleBill = new BillGates.Type("Little Bill", 6); //用BillGate的类型建LittleBill
LittleBill.SayHello();

alert(BillGates.isA(Person));       //true
alert(BillGates.isA(Employee));     //false
alert(SteveJobs.isA(Person));       //true
* 
 */
coos.Class = function()
{
    var aDefine = arguments[arguments.length-1]; //最后一个参数是类定义
    if(!aDefine) return;
    var aBase = arguments.length>1 ? arguments[0] : coos.object; //解析基类
    
    function prototype_(){}; //构造prototype的临时函数,用于挂接原型链
    prototype_.prototype = aBase.prototype;  //准备传递prototype
    var aPrototype = new prototype_();    //建立类要用的prototype
    
    for(var member in aDefine)  //复制类定义到当前类的prototype
    {
        if(member!="Create")    //构造函数不用复制
        {
            aPrototype[member] = aDefine[member];
        }
    }
    //根据是否继承特殊属性和性能情况,可分别注释掉下列的语句
    if(aDefine.toString != Object.prototype.toString)
    {
        aPrototype.toString = aDefine.toString;
    }
    if(aDefine.toLocaleString != Object.prototype.toLocaleString)
    {
        aPrototype.toLocaleString = aDefine.toLocaleString;
    }
    if(aDefine.valueOf != Object.prototype.valueOf)
    {
        aPrototype.valueOf = aDefine.valueOf;
    }
    if(aDefine.Create)  //若有构造函数
    {
        var aType = aDefine.Create;  //类型即为该构造函数
    }
    else    //否则为默认构造函数
	{
        aType = function()
        {
            this.base.apply(this, arguments);   //调用基类构造函数
        };
	}

    aType.prototype = aPrototype;   //设置类(构造函数)的prototype
    aType.Base = aBase;             //设置类型关系,便于追溯继承关系
    aType.prototype.Type = aType;   //为本类对象扩展一个Type属性
    return aType;   //返回构造函数作为类
};

//根类object定义:
coos.object = function(){};    //定义小写的object根类,用于实现最基础的方法等
coos.object.prototype.isA = function(aType)   //判断对象是否属于某类型
{
    var self = this.Type;
    while(self)
    {
        if(self == aType) return true;
        self = self.Base;
    }
    return false;
};

coos.object.prototype.base = function()  //调用基类构造函数
{
    var Base = this.Type.Base;  //获取当前对象的基类  
    if(!Base.Base)  //若基类已没有基类
    {
        Base.apply(this, arguments);     //则直接调用基类构造函数
    }
    else    //若基类还有基类         
    {
        this.base = MakeBase(Base);     //先覆写this.base
        Base.apply(this, arguments);    //再调用基类构造函数
        delete this.base;               //删除覆写的base属性
    }
    function MakeBase(Type) //包装基类构造函数
    {
        var Base = Type.Base;
        if(!Base.Base) return Base; //基类已无基类,就无需包装
        return function()   //包装为引用临时变量Base的闭包函数
        {
            this.base = MakeBase(Base);     //先覆写this.base
            Base.apply(this, arguments);    //再调用基类构造函数
        }
    }
};
/**
 * 扩展函数功能
 * @param destination 要扩展的函数
 * @param source 扩展函数
 * @example
 coos.extend(Array.prototype,{
	clear : function () 
	{
		this.length = 0;
		return this;
	},
	first : function () 
	{
		return this[0];
	},
	last : function () 
	{
		return this[this.length - 1];
	}
});
 */
coos.extend = function(destination, source) {
  for (var property in source)
  {
    destination[property] = source[property];
  }
  return destination;
};

/**
 * simple inherit whit call parent this attribute
 * @param parentFunction
 */
coos.call = function(parentFunction)
{
	var parentfn = parentFunction + ".call(this)";
	eval(parentfn);
};

/**
 * override method
 * @param origclass, overrides the overrides is a json or hashmap
 */
coos.override = function(origclass, overrides)
{
    if(overrides)
    {
        var p = origclass.prototype;
        for(var method in overrides)
        {
            p[method] = overrides[method];
        }
    }
};

/**
 * 克隆对象
 */
coos.clone = function(obj)
{
	var temp = null;
	for(var p in obj)
	{
		temp[p] = obj[p];
	}
	return temp;
};

/**
 * 通用接口函数,为实现设计模式提供支持
 * @param name String类型 接口名称
 * @param methods 字符串数组,每个字符串都是一个必须的方法名称
 * @example 
 	//test coos.Interface 
	var testInterface = new coos.Interface("testInterface",["getId","getName"]);
	
	function adminUser(user)
	{
		//传入的user对象必须实现testInterface的方法
		coos.Interface.impl(user,testInterface);
		//由上面的接口保证了user对象实现了接口方法可以安全使用
		var id = user.getId();
		var name = user.getName();
		var message = "I'm a admin user";
		alert("id = " + id + " name = " + name + " message = " + message);
	}
	
	function vipUser(user)
	{
		//传入的user对象必须实现testInterface的方法
		coos.Interface.impl(user,testInterface);
		//由上面的接口保证了user对象实现了接口方法可以安全使用
		var id = user.getId();
		var name = user.getName();
		var message = "I'm a vip user";
		alert("id = " + id + " name = " + name + " message = " + message);
	}
	
	function user(id,name)
	{
		this.getId = function(){return id};
		this.getName = function(){return name};
	}
	
	adminUser(new user("1","admin"));
	vipUser(new user("2","zdz"));
 * 
 */
coos.Interface = function(name, methods) {
    if(arguments.length != 2) {
        throw new Error("Interface constructor called with " + arguments.length + "arguments, but expected exactly 2.");
    }
    
    this.name = name;
    this.methods = [];
    for(var i = 0, len = methods.length; i < len; i++) {
        if(typeof methods[i] !== 'string')
        {
            throw new Error("Interface constructor expects method names to be " + "passed in as a string.");
        }
        this.methods.push(methods[i]);        
    }    
};

/**
 * 最少传入两个参数,一个为对象,另外为要实现的接口,可传入多个接口
 * 在使用接口方法前作判断coos.Interface.impl(user,testInterface);
 */
coos.Interface.impl = function(object) {
    if(arguments.length < 2) {
        throw new Error("Function Interface.impl called with " + 
          arguments.length  + "arguments, but expected at least 2.");
    }

    for(var i = 1, len = arguments.length; i < len; i++) 
    {
        var _interface = arguments[i];
        if(_interface.constructor !== coos.Interface)
        {
            throw new Error("Function Interface.impl expects arguments "   
              + "two and above to be instances of Interface.");
        }
        
        for(var j = 0, methodsLen = _interface.methods.length; j < methodsLen; j++)
        {
            var method = _interface.methods[j];
            if(!object[method] || typeof object[method] !== 'function')
            {
                throw new Error("Function Interface.impl: object " 
                  + "does not implement the " + _interface.name 
                  + " interface. Method " + method + " was not found.");
            }
        }
    } 
};

/**
 * 反射机制的简单实现
 * @param obj 传入对象为obj类型,可以是json形式的
 * 
 */
coos.reflection = function(obj)
{
	for(var p in obj)
	{
		if(typeof(obj[p]) == "function")
		{
			//如果属性为function类型则执行
			obj[p]();
		}
	}
};

/**
 * 利用闭包构造一个单例类型返回,不能创建新的实例
 * @param fn 闭包函数function(){}的形式
 * @param singletonName 创建的单例类型名称
 * @example
	 var sessionFactory = new coos.singleton(
		function(){
			this.message = "I'm a sessionFactory!";
			this.sayHello = function(){alert("Hello!");}
		},"sessionFactory"
	);
	var mySession = sessionFactory.getInstance();
	mySession.sayHello();
	var newSession = new sessionFactory();// throw 单例类型sessionFactory不能实例化!
 */
coos.singleton = function(fn,singletonName)
{
	singletonName = singletonName || "singletonClass";
	var obj = new fn();
	var singletonClass = function()
	{
		throw new Error("单例类型" + singletonName + "不能实例化!");
	};
	singletonClass.getInstance = function(){return obj;};
	singletonClass.name = singletonName;
	return singletonClass;
};

/**
 * 定义通用的简单命令模式接口
 */
coos.command = new coos.Interface("coos.command",["execute"]);

/**
 * 定义通用的带取消操作的命令模式接口
 */
coos.undocommand = new coos.Interface("coos.undocommand",["execute","undo"]);

/**
 * aop 的实现
 * @param object 必须为对象,不能是方法本身
 * @example
 function aopTest()
{
    this.say1 =  function(s)
	{
        alert(s);
    };
    this.say2 =  function(s)
	{
        alert(s);
    };  
}
   
function beforeHander()
{
    alert("aspect said:");
}
function afterHander()
{
	alert("said by aspect");
}
  

var test = new aopTest();
coos.aop(test);
test.before("say1",beforeHander); 
test.after("say1",afterHander);
test.say1("hello I'm say1");

test.before("say2",beforeHander);
test.after("say2",afterHander);
test.say2("hello I'm say2");
 */
coos.aop = function(object)
{
	if(typeof(object) != "object")
	{
		throw new Error("传入的对象类型必须为object!");
		return false;
	}
	object.yield = null;
	object.rv = {};
	object.before  = function(method, f)
	{
		var original = eval("this." + method);
		this[method] = function()
		{
		  f.apply(this, arguments);
		  return original.apply(this, arguments);
		};
	};   
	object.after = function(method, f)
	{
	    var original = eval("this." + method);
	    this[method] = function()
	    {
	      this.rv[method] = original.apply(this, arguments);
	      return f.apply(this, arguments);
	    };
	};   
	object.around = function(method, f)
	{
    	var original = eval("this." + method);
    	this[method] = function()
	    {
	      this.yield = original;
	      return f.apply(this, arguments);
	    };
	};
};

/**
 * 采用prototype的Object扩展方法
 * @param obj 需要判断的对象
 */
coos.extend(Object, {
	extend : function(destination, source) {
	  for (var property in source)
	    destination[property] = source[property];
	  return destination;
	},
	toJSON: function(object) {
    var type = typeof object;
    switch (type) {
      case 'undefined':
      case 'function':
      case 'unknown': return;
      case 'boolean': return object.toString();
    }

    if (object === null) return 'null';
    if (object.toJSON) return object.toJSON();
    if (Object.isElement(object)) return;

    var results = [];
    for (var property in object) {
      var value = Object.toJSON(object[property]);
      if (!Object.isUndefined(value))
        results.push(property.toJSON() + ': ' + value);
    }
    return '{' + results.join(', ') + '}';
  },
  keys: function(object) {
    var keys = [];
    for (var property in object)
      keys.push(property);
    return keys;
  },
  values: function(object) {
    var values = [];
    for (var property in object)
      values.push(object[property]);
    return values;
  },
  clone: function(object) {
    return Object.extend({ }, object);
  },
  isElement: function(object) {
    return object && object.nodeType == 1;
  },
  isArray: function(object) {
  	//判断是否为数组,考虑到多种情况
  	return Object.prototype.toString.call(object) === '[object Array]';
    //return object != null && typeof object == "object" && 'splice' in object && 'join' in object;
  },
  isHash: function(object) {
    return object instanceof Hash;
  },
  isFunction: function(object) {
    return typeof object == "function";
  },
  isString: function(object) {
    return typeof object == "string";
  },
  isNumber: function(object) {
    return typeof object == "number";
  },
  isUndefined: function(object) {
    return typeof object == "undefined";
  }
});

/**
 * json的处理函数
 * parse函数把json字符串转换成对象
 * toJSONString把对象转换成json字符串(包括普通对象和json对象)
 */
coos.json = {
	parse : function(data)
	{
		if(typeof(data) != "object")
		{
			data = eval('(' + data + ')');
		}
		return data;
	},
	toJSONString : function(obj)
	{
		switch(typeof(obj))
		{
			case "object" :
			{
				var result = [];
				if(obj instanceof Array)
				{
					var len = obj.length;
					for(var i = 0; i < len; i++)
					{
						result.push(coos.json.toJSONString(obj[i]));
					}
					return "[" + result.toString(",") + "]";
				}
				else if(obj instanceof RegExp)
				{
					return obj.toString();
				}
				else
				{
					for(var attribute in obj)
					{
						result.push(attribute + ":" + coos.json.toJSONString(obj[attribute]));
					}
					return "{" + result.join(",") + "}";
				}
			}
			case "function":
			{
				return "function(){}";
			}
			case "number":
			{
				return obj.toString();
			}
			case "boolean":
			{
				return obj.toString();
			}
			case "string":
			{
				return "\"" + obj.replace(/(\\|\")/g, "\\$1").replace(/\n|\r|\t/g,function(a){return ("\n" == a) ? "\\n":("\r" == a) ? "\\r":("\t" == a) ? "\\t":"";}) + "\"";
			}
			default:
			{
				return obj.toString();
			}
		}
	}
};

/**
 * browser userAgent
 */
coos.userAgent = navigator.userAgent.toLowerCase();
/**
 * Figure out what browser is being used 
 * typeof(window.external.max_version) in some ie7.0 is unkonwn not undefined
 * @example 
if(coos.browser.msie){alert("ie browser "+"version="+ coos.browser.version);}
if(coos.browser.maxthon){alert("maxthon browser "+"version="+ coos.browser.maxthonVersion);};
alert(coos.browser.maxthon + " maxthon browser "+"version= "+ coos.browser.maxthonVersion);
 */
coos.browser = {
	version: (coos.userAgent.match( /.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/ ) || [0,'0'])[1],
	safari: /webkit/.test(coos.userAgent) &&  !/chrome/.test(coos.userAgent),
	chrome: /chrome/.test(coos.userAgent),
	opera: /opera/.test(coos.userAgent),
	msie: /msie/.test(coos.userAgent) && !/opera/.test(coos.userAgent),
	firefox: /firefox/.test(coos.userAgent),
	mozilla: /mozilla/.test(coos.userAgent) && !/(compatible|webkit)/.test(coos.userAgent),
	maxthon: (window.external && (typeof(window.external.max_version) == "string"))?true:false,
	maxthonVersion: (window.external && (typeof(window.external.max_version) == "string"))?window.external.max_version.substr(0,1):undefined
};

/**
 * 简单的兼容浏览器的onload事件绑定
 * @param fn 需要绑定window.onload后执行的function
 */
coos.onloadEvent = function(fn)
{
	if (window.addEventListener) 
	{
		window.addEventListener("load",fn,false);
	}
	else if(window.attachEvent)
	{
		window.attachEvent("onload", fn);
	}
	else
	{
		window.onload = fn;
	}
};
/**
 * 根据id快速获取dom对象的方法
 * @param id 字符串类型
 * @return DOM element
 */
coos.$id = function(id)
{
  return document.getElementById(id);
};

/**
 * 根据name快速获取dom对象的方法
 * @param name 字符串类型
 * @return DOM elements
 */
coos.$name = function(name)
{
  return document.getElementsByName(name);
};

/**
 * 在不确定传入id还是obj类型时快速获取dom对象的方法
 * @param el 元素id或对象
 * @return DOM element
 */
coos.$obj = function(el)
{
	var obj = el;
	if(typeof(el) == "string")
	{
		obj = document.getElementById(el);
	}
	return obj;
};

/**
 * 获取元素下面所有传入类型的对象.
 * @param tag 标签名称
 * @param el 元素id或对象,为空或不存在则默认为document
 * @example
 获取id为testTag的div下所有li对象为:coos.$tag("li","testTag");
 获取所有li对象为:coos.$tag("li");
 */
coos.$tag = function(tag,el)
{
	var el = coos.$obj(el) || document;
	return el.getElementsByTagName(tag);
};

/**
 * 获取元素的类型名称(如div span)
 */
coos.$tagName = function(el)
{
	return coos.$obj(el).tagName.toLowerCase();
};

/**
 * 获取iframe的contentWindow对象
 */
coos.$F = function(el)
{
	if(!coos.$obj(el) || coos.$tagName(el) != "iframe")
	{
		return null;
	}
	return coos.$obj(el).contentWindow;
};

/**
 * 取得某个范围内的随机数
 */
coos.$random = function(min, max)
{
	return Math.floor(Math.random() * (max - min + 1) + min);
};

/**
 * 获得当前时间
 */
coos.$time = function()
{
	return new Date().getTime();
};

/**
 * 返回document.body
 */
coos.$body = function()
{
	return document.body;
};

/**
 * 获取元素的innerhtml内容
 * @param el 元素id或对象,默认为document.body
 */
coos.$html = function(el)
{
	var obj = coos.$obj(el)|| document.body;
	return 	obj.innerHTMl;
};

/**
 * 获取head
 */
coos.$head = function()
{
	return 	document.getElementsByTagName('head')[0];
};

/**
 * 获取元素的文本内容
 * @param el 元素id或对象
 */
coos.$text = function(el)
{
	var obj = coos.$obj(el);
	return 	obj.textContent || obj.innerText;
};

/**
 * 创建元素
 * coos.$create("div")返回一个未绑定到DOM上的div对象
 */
coos.$create = function(tag)
{
	return document.createElement(tag);
};

/**
 * 添加元素
 * @param el 要添加子元素的父元素
 * @param 要添加的子元素
 */
coos.$append = function(el,child)
{
	coos.$obj(el).appendChild(coos.$obj(child));
};

/**
 * 删除元素对应的class
 */
coos.$removeClass = function(className,el)
{
	coos.$obj(el).className = coos.$obj(el).className.replace(new RegExp("( ?|^)" + className + "\\b"), "");
};

/**
 * 判断元素是否有该class
 */
coos.$hasClass = function(className,el)
{
	var oReg = new RegExp("( ?|^)" + className + "\\b");
	return oReg.test(coos.$obj(el).className);
};

/**
 * 判断元素是否有该class
 */
coos.$addClass = function(className,el)
{
	var el = coos.$obj(el);
	if(coos.$hasClass(className,el))
	{
		return;
	}
	else
	{
		el.className = el.className + " " + className;
	}
};

/**
 * 删除元素下对应标签元素所有对应的样式
 */
coos.$removeTagClass = function(className,tag,el)
{
	var els = coos.$tag(tag,el);
	var len = els.length;
	for(var i = 0; i < len; i++)
	{
		coos.$removeClass(className,els[i]);
	}
};

/**
 * 获取元素下对应标签下对应样式的所有元素
 */
coos.$getTagClassElements = function(className,tag,el)
{
	var els = coos.$tag(tag,el);
	var result = [];
	var len = els.length;
	for(var i = 0; i < len; i++)
	{
		if(coos.$hasClass(className,els[i]))
		{
			result[result.length] = els[i];
		}
	}
	return result;
};

/**
 * 此元素下所有对应标签的元素
 */
coos.$hiddenTag = function(tag,el)
{
	var els = coos.$tag(tag,el);
	var len = els.length;
	for(var i = 0; i < len; i++)
	{
		els[i].style.display = "none";
	}
};

coos.$top = function(el)
{
	var obj = coos.$obj(el);
	if(coos.browser.msie)
	{
		var top = 0;
	}
	else
	{
		var top = 2;
	}
	while(obj.offsetParent)
	{
		top += obj.offsetTop + (obj.currentStyle?(parseInt(obj.currentStyle.borderTopWidth)).NaN0():0);
		obj = obj.offsetParent;
	}
	top += obj.offsetTop + (obj.currentStyle?(parseInt(obj.currentStyle.borderTopWidth)).NaN0():0);
	
	return top;
};

coos.$left = function(el)
{
	var obj = coos.$obj(el);
	if(coos.browser.msie)
	{
		var left = -2;
	}
	else
	{
		var left = 0;
	}
	while(obj.offsetParent)
	{
		left += obj.offsetLeft + (obj.currentStyle?(parseInt(obj.currentStyle.borderLeftWidth)).NaN0():0);
		obj = obj.offsetParent;
	}
	left += obj.offsetLeft + (obj.currentStyle?(parseInt(obj.currentStyle.borderLeftWidth)).NaN0():0);
	
	return left;
};

/**
 * 插入html代码,解决火狐下不能直接插入html字符串的问题
 */
coos.$insert = function(where, el, html)
{
	where = where.toLowerCase();   
	if(el.insertAdjacentHTML)
	{
	    switch(where)
	    {   
	        case "before":   
	            el.insertAdjacentHTML('beforeBegin', html);   
	            return el.previousSibling;
	            break;
	        case "top":   
	            el.insertAdjacentHTML('afterBegin', html);   
	            return el.firstChild;
	            break;
	        case "bottom":   
	            el.insertAdjacentHTML('beforeEnd', html);   
	            return el.lastChild;
	            break; 
	        case "after":   
	            el.insertAdjacentHTML('afterEnd', html);   
	            return el.nextSibling;
	            break;
	    }
	    throw 'Illegal insertion point -> "' + where + '"';   
	}
	
	var range = el.ownerDocument.createRange();   
    var frag;
    switch(where)
    {   
         case "before":   
            range.setStartBefore(el);   
            frag = range.createContextualFragment(html);   
            el.parentNode.insertBefore(frag, el);   
            return el.previousSibling;
            break;
         case "top":   
            if(el.firstChild)
            {   
                range.setStartBefore(el.firstChild);   
                frag = range.createContextualFragment(html);   
                el.insertBefore(frag, el.firstChild);   
                return el.firstChild;
            }else
            {   
                el.innerHTML = html;   
                return el.firstChild;   
            }
            break;
        case "bottom":   
            if(el.lastChild)
            {   
                range.setStartAfter(el.lastChild);   
                frag = range.createContextualFragment(html);   
                el.appendChild(frag);   
                return el.lastChild;   
            }
            else
            {   
                el.innerHTML = html;   
                return el.lastChild;   
            }
            break;
        case "after":   
            range.setStartAfter(el);   
            frag = range.createContextualFragment(html);   
            el.parentNode.insertBefore(frag, el.nextSibling);   
            return el.nextSibling; 
            break;  
        }   
        throw 'Illegal insertion point -> "' + where + '"';
};
//一加载脚本就需要初始化的函数,避免对象不存在的错误。
(function(){
/**
 * 添加样式
 */
coos.style = {
	add : function(content)
	{
		var style = null;
	    if(document.all)
	    {
	        style = document.createStyleSheet();
	        style.cssText = content;
	    }
	    else
	    {
	        style = document.createElement("style");
	        style.type = "text/css";
	        //style.innerHTML = content;//Safari、Chrome 下innerHTML只读
	        style.textContent = content;
	        try
	        {
	    		document.getElementsByTagName("head")[0].appendChild(style);
	    	}
	    	catch(e){}
	    }
	}
};

/**
 * 提供url常用操作功能
 * random 在url后面加入随机数参数
 * getAttribe 获得url中的参数值
 * replaceAttribe 替换url中的参数值
 * addAttribe 添加参数
 * getAction 获得url中action的名字(后缀可变)
 * location url跳转
 */
coos.url = {
	random : function(url)
	{
		if (url.indexOf ("?") > 0)
		{
			url = url + "&random=" + new Date().getTime();
		}
		else
		{
			url = url + "?random=" + new Date().getTime();
		}
		return url;
	},
	getAttribe : function(type,url)
	{
		var url = url || location.href;
		var urltemp = url.split(type + "=")[1];
		if(!urltemp) return "";
		if(urltemp.indexOf("&") == -1) 
		{
			return urltemp;
		}
		else
		{
			return urltemp.split("&")[0];
		}
	},
	replaceAttribe : function(type,value,url)
	{
		var url = url || location.href;
		
		var oReg = new RegExp(type + "=([^&]+)?","g");
		
		url= url.replace(oReg, type + "=" + value);
		return url;
	},
	addAttribe : function(type,value,url)
	{
		var url = url || location.href;
		if(url.indexOf ("?") == -1)
		{
			return (url + "?" + type + "=" + value);
		}
		else
		{
			return (url + "&" + type + "=" + value);
		}
	},
	getAction : function(url,action)
	{
		var url = url || location.href;
		var action = action || ".action";
		var temp = url.split(action)[0];
		return temp.substring(temp.lastIndexOf("/")+1,temp.length);
	},
	location : function(url,message)
	{
		var url = url || location.href;
		if(!message)
		{
			window.location = url;
			return false; 
		}
		if(confirm(message))
		{
			window.location = url;
		}
		return false; 
	}
};

/**
 * iframe的处理函数
 * 提供批量和单独iframe自适应高度功能
 */
coos.iframe = {
	autoHeights : function(els)
	{
		for (var i = 0; i < arguments.length; i++) 
		{
	        coos.iframe.autoHeight(arguments[i]);
	    }
	},
	autoHeight : function(el)
	{
		var obj = coos.$obj(el);
		var id = obj.id;
		var subWeb = document.frames ? document.frames[id].document : obj.contentDocument;   
		if(obj != null && subWeb != null)
		{
			//iframe body 设置为height:100%;时火狐下最小高度为150
			obj.height = parseInt(subWeb.body.scrollHeight) + "px";
		   
		}
	},
	onload : function(el,fn)
	{
		var ifr = coos.$obj(el);
		//IE中iframe只支持隐形的onload事件,需要通过attachEvent来注册,ie的readystatechange事件有一些潜在的问题
		if(ifr.attachEvent)
		{
			ifr.attachEvent("onload",fn);
		}
		else
		{
			ifr.onload = fn;
		}
	}
};

/**
 * cookie的处理函数
 */
coos.cookie = {
	set : function(name,value,days,path,domain,secure)
	{
		var days = days || 100;
		var path = path || "/";
		var domain = domain || "";
		var secure = secure || "";
	    var exp  = new Date();
	    exp.setTime(exp.getTime() + days*24*60*60*1000);
	    document.cookie = name + "="+ escape (value) 
	    + ";expires=" + exp.toGMTString()
	    + ";path="+ path
	    + (domain == "" ? "" : ("; domain=" + domain))
	    + (secure ? "; secure" : "");
	},
	get : function(name)
	{
		var arr = document.cookie.match(new RegExp("(^| )"+name+"=([^;]*)(;|$)"));
		if(arr != null)
			return unescape(arr[2]);
		return null;
	},
	del : function(name)
	{
		var exp = new Date();
	    exp.setTime(exp.getTime() - 1);
	    var cval=this.get(name);
	    if(cval!=null)
	    	document.cookie= name + "="+cval+";expires="+exp.toGMTString();
	}
};

/**
 * form相关的通用函数
 */
coos.form = {
	submit : function(formElement,submitId)
	{
		if(!coos.$obj(formElement))return false;
		var submitId = submitId || "subButton";
		coos.$id(submitId).disabled = true;
		coos.$obj(formElement).submit();
		return false;
	},
	update : function(formElement,formName,action)
	{
		if(formName)
			formElement.name = formName;
		if(action)
			formElement.action = action;
	},
	validate : function(){}
};

})();
//初始化函数结束

/**
 * 引入script和css文件
 */
coos.include = function()
{
	function create(path)
	{
		var src = path.split("|")[0];
		var charset = path.split("|")[1];
		var sobj = document.createElement('script'); 
		sobj.type = "text/javascript"; 
		sobj.src = src;
		sobj.charset = charset || "utf-8";
		document.getElementsByTagName('head')[0].appendChild(sobj);
	}
	
	function getScriptPath(key)
	{
		var scripts = document.getElementsByTagName("script");
		var len = scripts.length;
		for (var i = 0; i < len; i++)
		{
			if(scripts[i].src.indexOf(key) != -1)
			{
				return scripts[i].src.split(key)[0];
			}
		}
		return null;
	}
	//获得script的路径,只传入文件名则默认为coos.js同一个目录
	function path(src,key)
	{
		if(src.indexOf("/") != -1)
		{
			return src;
		}
		else
		{
			var key = key || "coos.js";
			return getScriptPath(key) + src;
		}
	}
	
	return{
		script : function()
		{
			var len = arguments.length;
			
			for(var i = 0; i < len; i++)
			{
				create(path(arguments[i]));
			}
		},
		css : function()
		{
			var len = arguments.length;
			
			for(var i = 0; i < len; i++)
			{
				var css = document.createElement("link");
				css.rel = "stylesheet";
				css.type = "text/css";
				css.href = path; 
				create(css);
			}
		}
	}
	
}();

//由于导入文件太多可能导致难以预料的问题,把主要函数开发稳定后合并在同类脚本里面可以减少不必要的异常
//需要设定charset属性的在文件后面加上|编码,如:coos.ext.base.js|gbk,coos.ext.base.js|utf-8,默认为utf-8
coos.include.script("coos.ext.base.js");
coos.include.script("coos.ui.base.js");
//由于ajax文件内容比较多,还不稳定故单独导入
coos.include.script("coos.ext.ajax.js");

  

 

完整版本请到google code开源项目上下载

google.code网址:http://code.google.com/p/coos/