常用JAVASCRIPT函数,转

/**************************************************

* * sl是scriptlover的简称 ,源自http://www.scriptlover.com(我的个人网站)

* * 该文件主要将常用的函数,功能做一下封装,以便于精炼自己的程序

* * 2008-11-27

* **************************************************

* * msn:danxinju@hotmail.com

* * author:淡新举

***************************************************/

var sl = window.sl = {

/*

** <summary>

** 添加事件监听

** </summary>

** <param name="target">监听对象</param>

** <param name="eventType">事件类型</param>

** <param name="handler">处理函数</param>

*/

addEventHandler:function(target, eventType, handler){

if (target.addEventListener)

{

target.addEventListener(eventType, handler, false);

}

else if (target.attachEvent)

{

target.attachEvent("on" + eventType, handler);

}

else

{

target["on" + eventType] = handler;

}

} ,

/*

** <summary>

** 构建字符串对象

** </summary>

*/

stringBuilder:function(){

this.arr = [];

/*添加字符项目*/

this.push = function(item){

this.arr.push(item);

};

/*清空字符串*/

this.clear = function(){

this.arr.length = 0;

};

/*返回结果字符串*/

this.toString = function(){

return this.arr.join("");

};

}

};

/*

** <summary>

** 获取对象

** </summary>

** <param name="selector">选择参数</param>

** <param name="parentNode">父节点</param>

*/

sl.getElement = function(selector ,parentNode){

/*

selector参数解释(均支持以,隔开的多重选择)

#)前缀根据id返回对象

=)根据属性返回对象

)无符号则根据tagName返回对象

*/

/*#)前缀根据id返回对象*/

var execId = function(selector){

var selector = selector.replace(/#| /g ,"");

var arr = selector.split(",") ,rets = [] ,temp;

for (var i=0;i<arr.length ;i++ )

{

temp = document.getElementById(arr[i]);

if (temp)

{

rets.push(temp);

}

}

return (rets.length > 1)? rets : rets[0];

};

/*=)根据属性返回对象*/

var execAttribute = function(selector ,parentNode){

var parentNode = parentNode? parentNode : document;

var objects = parentNode.getElementsByTagName("*");

var arr = selector.split("=") ,rets = [] ,temp;

for (var i=0;i<objects.length ;i++ )

{

if (objects[i].getAttribute(arr[0]) == arr[1])

{

rets.push(objects[i]);

}

}

return (rets.length > 1)? rets : rets[0];

};

/*无符号则根据tagName返回对象*/

var execTagName = function(selector ,parentNode){

var parentNode = parentNode? parentNode : document;

return parentNode.getElementsByTagName(selector);

};

/*分流处理*/

if (selector.indexOf("#") != -1)

{

return execId(selector ,parentNode);

}

else if (selector.indexOf("=") != -1)

{

return execAttribute(selector ,parentNode);

}

else

{

return execTagName(selector ,parentNode);

}

};

/*

** <summary>

** ajax应用

** </summary>

** <param name="url">资源地址</param>

** <param name="callback">回调方法</param>

** <param name="method">请求方式</param>

** <param name="data">所发送数据</param>

*/

sl.ajax = function(url ,callback ,method ,data){

var method = method ? method : "get";

var data = data ? data : null;

var url = (method == "get") ? (url +"?"+ data) : url;

var http = window.XMLHttpRequest? new XMLHttpRequest() : new ActiveXObject("Microsoft.XMLHTTP");

var doGet = function(){

http.open(method ,url ,false);

http.setRequestHeader("If-Modified-Since" , "0" );

http.send(null);

callback(http.responseText);

};

var doPost = function(){

http.open(method ,url ,false);

http.setRequestHeader("content-length" ,data ?data.length : 0);

http.setRequestHeader("Content-Type" ,"application/x-www-form-urlencoded");

http.send(data);

callback(http.responseText);

};

if (method == "post")

{

doPost();

}

else

{

doGet();

}

http = null;

};

/*

** <summary>

** URl参数处理

** </summary>

** <param name="arg">参数</param>

*/

sl.request = function(arg){

/*根据参数返回值*/

var queryString = function(arg){

var uri = window.location.search;

var re = new RegExp(""+ arg +""=([^"&"?]*)", "ig");

return ((uri.match(re))?(uri.match(re)[0].substr(arg.length+1)):null);

};

/*不传参数返回全部参数*/

var queryStrings = function(){

var uri = window.location.search;

var re = /"w*"=([^"&"?]*)/ig;

var retval=[];

while ((arr = re.exec(uri)) != null)

retval.push(arr[0]);

return retval;

};

/*分流处理*/

if (arg)

{

return queryString(arg);

}

else

{

return queryStrings();

}

};

/*

** <summary>

** Cookie处理

** </summary>

** <param name="name">cookie键名</param>

** <param name="value">cookie键值</param>

** <param name="option">可选参数</param>

*/

sl.cookie = {

/*设置cookie*/

setCookie:function(name, value, option){

var str = name +"="+ escape(value);

if(option){

if(option.expireHours){

var d = new Date();

d.setTime(d.getTime()+option.expireHours*3600*1000);

str += "; expires="+d.toGMTString();

}

if(option.path) str += "; path="+option.path;

if(option.domain) str += "; domain="+option.domain;

if(option.secure) str += "; true";

}

document.cookie = str;

} ,

/*获取cookie*/

getCookie:function(name){

var arr = document.cookie.split("; ");

if(arr.length == 0) return "";

for(var i=0; i <arr.length; i++)

{

tmp = arr[i].split("=");

if(tmp[0] == name)

{

return unescape(tmp[1]);

}

}

return "";

} ,

/*删除cookie*/

delCookie:function(name){

this.setCookie(name,"",{expireHours:-1});

} ,

/*获取cookie长度*/

getLength:function(){

return document.cookie.split("; ").length;

}

};

/*

** <summary>

** 获取鼠标位置

** </summary>

** <param name="e">事件对象</param>

*/

sl.getMousePos = function (e){

var e = e?e : event;

if (e.pageX || e.pageY)

{

return { x: e.pageX, y: e.pageY };

}

else

{

return { x: e.clientX + document.documentElement.scrollLeft - document.body.clientLeft,

y: e.clientY + document.documentElement.scrollTop - document.body.clientTop

};

}

};

/*

** <summary>

** 获取对象位置

** </summary>

** <param name="element">对象</param>

*/

sl.getElementPos = function(element){

var offsetTop = element.offsetTop;

var offsetLeft = element.offsetLeft;

while(element = element.offsetParent)

{

offsetTop += element.offsetTop;

offsetLeft += element.offsetLeft;

}

return {x:offsetLeft ,y:offsetTop};

};