常用函数整理

/**
 * --------------------------------------------------------------------------
 * 小安整理的js函数
 * --------------------------------------------------------------------------
 * @package          JavaScript_function
 * @author           azhw
 * @since            Version 1.0
 */


/*-------------------------------------
  js获取当前url参数的两种方法 
 -------------------------------------*/
//方法一
function getQueryString(name) {
    var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i");
    var r = window.location.search.substr(1).match(reg);
    if (r != null) return unescape(r[2]); return null;
}
//调用
// alert(GetQueryString("参数名1"));
// alert(GetQueryString("参数名2"));
// alert(GetQueryString("参数名3"));

//方法二
function GetRequest() {
   var url = location.search; //获取url中"?"符后的字串
   var theRequest = new Object();
   if (url.indexOf("?") != -1) {
      var str = url.substr(1);
      strs = str.split("&");
      for(var i = 0; i < strs.length; i ++) {
         theRequest[strs[i].split("=")[0]]=unescape(strs[i].split("=")[1]);
      }
   }
   return theRequest;
}
//调用
// <Script language="javascript">
// var Request = new Object();
// Request = GetRequest();
// var 参数1,参数2,参数3,参数N;
// 参数1 = Request['参数1'];
// 参数2 = Request['参数2'];
// 参数3 = Request['参数3'];
// 参数N = Request['参数N'];
// </Script>
/*
---------------------------------------
*/



/*-------------------------------------
 js获取屏幕大小
 -------------------------------------*/
function a(){
document.write(
"屏幕分辨率为:"+screen.width+"*"+screen.height
+"<br />"+
"屏幕可用大小:"+screen.availWidth+"*"+screen.availHeight
+"<br />"+
"网页可见区域宽:"+document.body.clientWidth
+"<br />"+
"网页可见区域高:"+document.body.clientHeight
+"<br />"+
"网页可见区域宽(包括边线的宽):"+document.body.offsetWidth
+"<br />"+
"网页可见区域高(包括边线的宽):"+document.body.offsetHeight
+"<br />"+
"网页正文全文宽:"+document.body.scrollWidth
+"<br />"+
"网页正文全文高:"+document.body.scrollHeight
+"<br />"+
"网页被卷去的高:"+document.body.scrollTop
+"<br />"+
"网页被卷去的左:"+document.body.scrollLeft
+"<br />"+
"网页正文部分上:"+window.screenTop
+"<br />"+
"网页正文部分左:"+window.screenLeft
+"<br />"+
"屏幕分辨率的高:"+window.screen.height
+"<br />"+
"屏幕分辨率的宽:"+window.screen.width
+"<br />"+
"屏幕可用工作区高度:"+window.screen.availHeight
+"<br />"+
"屏幕可用工作区宽度:"+window.screen.availWidth
);
}
/*
------------------------------------------------
*/


/*-------------------------------------
 js模拟鼠标除法点击
 -------------------------------------*/
document.getElementById("target").onclick();  
document.getElementById("target").click();
//btnObj.click()是真正地用程序去点击按钮,触发了按钮的onclick()事件
//btnObj.onclick()只是简单地调用了btnObj的onclick所指向的方法,只是调用方法而已,并未触发事件



/*-------------------------------------
 js控制option
 -------------------------------------*/
//循环一个一个移除,可控
/*
<select name="mySelect" id="selectID">
    <option value=1>1</option>
    <option value=2>2</option>
</select>
*/
var theSelect=document.all.mySelect;
for(var i=theSelect.options.length-1;i>=0;i--)
theSelect.options.remove(i);

//删除内容
document.getElementById("selectID").innerHTML = "";

//令长度为0
document.getElementById("selectID").options.length=0; 

//删除制定位置的选项,在第一种里用过
document.getElementById("selectID").options.remove(index);

//添加内容
var selectObj=document.getElementById("selectID");
selectObj.options[selectObj.length] = new Option("mytest", "2");
//selectObj.options[index] = new Option("mytest", "2");
/*
---------------------------------------------------------
*/


/*-------------------------------------
 js日期格式转换成时间戳
 -------------------------------------*/
/**
 2  0  1  5  -  0  4  -  0  5  _  1  0  :  1  0  :  1  0
 0  1  2  3  4  5  6  7  8  9  10 11 12 13 14 15 16 17 18

 注: 下划线(_) 代表空格
*/
function transdate(endTime){
   var date=new Date();
   date.setFullYear(endTime.substring(0,4));
   date.setMonth(endTime.substring(5,7)-1);
   date.setDate(endTime.substring(8,10));
   date.setHours(endTime.substring(11,13));
   date.setMinutes(endTime.substring(14,16));
   date.setSeconds(endTime.substring(17,19));
   return Date.parse(date)/1000;
}
/*
------------------------------------------
*/

/*-------------------------------------
 JavaScript 获取当前时间戳:
 -------------------------------------*/

var timestamp = Date.parse(new Date());
//结果:1280977330000  获取的时间戳是把毫秒改成000显示,

var timestamp = (new Date()).valueOf();
var timestamp=new Date().getTime();
//获取了当前毫秒的时间戳

/*-------------------------------------
 js删除字符串最后一个字符
 -------------------------------------*/
//字符串:string s = "1,2,3,4,5,"
//目标:删除最后一个 "," ---> "1,2,3,4,5"
var s = "1,2,3,4,5,";
s=s.substring(0,s.length-1);
alert(s);



/*-------------------------------------
 js DOM树加载完成后加载或执行
 -------------------------------------*/
// 1 === 2
 $(function(){
  $("#a").click(function(){
    //adding your code here
  });
});
//2 === 1
$(document).ready(function(){
  $("#a").click(function(){
    //adding your code here  
  });
});
/*-------------------------------------
 js 页面加载完成后加载或执行
 整个页面的document全部加载完成以后执行,
 而且要求所有的外部图片和资源全部加载完成,
 如果外部资源,例如图片需要很长时间来加载,那么这个js效果就会让用户感觉失效了。
 js里的DOM加载完成后不知,待查
 -------------------------------------*/
//1.
window.onload = function(){
  $("#a").click(function(){
    //adding your code here
  });
} 

//2. 
function myfun(){
    alert("this window.onload");
}
window.onload=myfun;//不要括号


/*-------------------------------------
 js在页面输出日期和星期,时间
 -------------------------------------*/
var Today = new Date();
var DateName = new Array("星期天", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六");
var MonthName = new Array("1月", "2月", "3月", "4月", "5月", "6月", "7月", "8月", "9月", "10月", "11月", "12月");
document.write("<span class=\"date\">" + Today.getFullYear() + "年" + MonthName[Today.getMonth()] +
Today.getDate() + "日" + "&nbsp; " + DateName[Today.getDay()] + "</span>");


/*-------------------------------------
 js控制input[type=text]获取失去焦点
 -------------------------------------*/
<input type="text" value="xiaoan" name="nick_name" onfocus="if(this.value == 'xiaoan') this.value = 'xiao'" onblur="if(this.value =='') this.value = 'xiaoa'">

<pre>
onfocus="if(this.value == 'xiaoan') this.value = 'xiao'"
</pre>
<p>当输入框获得焦点时onfocus 如果当前值为xiaoan,那么把输入框的值写成xiao</p>
<pre>
onblur="if(this.value =='') this.value = 'xiaoa'"
</pre>
<p>当输入框失去焦点时onblur 如果当前值为'',那么把输入框的值写成xiaoa</p>
<p>反正最后达到一个效果让输入框不为空</p>


/*-------------------------------------
 改变url参数并可以把不存在的参数添加进url最后
 -------------------------------------*/
function changeURLPar(destiny, par, par_value){
    var pattern = par+'=([^&]*)';
    var replaceText = par+'='+par_value;
    if (destiny.match(pattern)){
        var tmp = '/\\'+par+'=[^&]*/';
        tmp = destiny.replace(eval(tmp), replaceText);
        return (tmp);
    }
    else{
        if (destiny.match('[\?]')){
            return destiny+'&'+ replaceText;
        }
        else{
            return destiny+'?'+replaceText;
        }
    }
    return destiny+'\n'+par+'\n'+par_value;
} 

//destiny是目标字符串,比如是http://www.huistd.com/?id=3&ttt=3
//par是参数名,par_value是参数要更改的值,调用结果如下:
//changeURLPar(test, 'id', 99); // http://www.huistd.com/?id=99&ttt=3
//添加一个不存在的参数haha
//changeURLPar(test, 'haha', 33); // http://www.huistd.com/?id=99&ttt=3&haha=33 
/*
--------------------------------------------------------------------------
*/

/**
 * 生成一个自定义范围的随机数
 * 
 * @returns {int}
 */
function GetRandomNum(Min, Max){
    var Range = Max - Min;
    var Rand = Math.random();
    return(Min + Math.round(Rand * Range));
}



/*-------------------------------------
 js获取各种节点的方法
 -------------------------------------*/
1. 通过顶层document节点获取
  (1) document.getElementById(elementId)该方法通过节点的ID可以准确获得需要的元素是比较简单快捷的方法如果页面上含有多个相同id的节点那么只返回第一个节点
    如今已经出现了如prototypeMootools等多个JavaScript库它们提供了更简便的方法$(id)参数仍然是节点的id这个方法可以看作是document.getElementById()的另外一种写法不过$()的功能更为强大具体用法可以参考它们各自的API文档
  (2)document.getElementsByName(elementName)该方法是通过节点的name获取节点从名字可以看出这个方法返回的不是一个节点元素而是具有同样名称的节点数组然后我们可以通过要获取节点的某个属性来循环判断是否为需要的节点
    例如在HTML中checkbox和radio都是通过相同的name属性值来标识一个组内的元素如果我们现在要获取被选中的元素首先获取改组元素然后循环判断是节点的checked属性值是否为true即可
  (3)document.getElementsByTagName(tagName)该方法是通过节点的Tag获取节点同样该方法也是返回一个数组例如document.getElementsByTagName('A')将会返回页面上所有超链接节点在获取节点之前一般都是知道节点的类型的所以使用该方法比较简单但是缺点也是显而易见那就是返回的数组可能十分庞大这样就会浪费很多时间那么这个方法是不是就没有用处了呢当然不是这个方法和上面的两个不同它不是document节点的专有方法还可以应用其他的节点下面将会提到
2通过父节点获取
  (1)parentObj.firstChild如果节点为已知节点parentObj的第一个子节点就可以使用这个方法这个属性是可以递归使用的也就是支持parentObj.firstChild.firstChild.firstChild...的形式如此就可以获得更深层次的节点
  (2)parentObj.lastChild很显然这个属性是获取已知节点parentObj的最后一个子节点与firstChild一样它也可以递归使用
    在使用中如果我们把二者结合起来那么将会达到更加令人兴奋的效果parentObj.firstChild.lastChild.lastChild...
  (3)parentObj.childNodes获取已知节点的子节点数组然后可以通过循环或者索引找到需要的节点
    注意经测试发现在IE7上获取的是直接子节点的数组而在Firefox2.0.0.11上获取的是所有子节点即包括子节点的子节点
  (4)parentObj.children获取已知节点的直接子节点数组
    注意经测试在IE7上和childNodes效果一样而Firefox2.0.0.11不支持这也是为什么我要使用和其他方法不同样式的原因因此不建议使用
  (5)parentObj.getElementsByTagName(tagName)使用方法不再赘述它返回已知节点的所有子节点中类型为指定值的子节点数组例如parentObj.getElementsByTagName('A')返回已知的子节点中的所有超链接
3通过临近节点获取
  (1)neighbourNode.previousSibling获取已知节点neighbourNode的前一个节点这个属性和前面的firstChildlastChild一样都似乎可以递归使用的
  (2)neighbourNode.nextSibling获取已知节点neighbourNode的下一个节点同样支持递归
4通过子节点获取
  (1)childNode.parentNode获取已知节点的父节点


/*-------------------------------------
 js获取各种时间
 -------------------------------------*/
var now = new Date();
now; // Wed Jun 24 2015 19:49:22 GMT+0800 (CST)
now.getFullYear(); // 2015, 年份
now.getMonth(); // 5, 月份,注意月份范围是0~11,5表示六月
now.getDate(); // 24, 表示24号
now.getDay(); // 3, 表示星期三
now.getHours(); // 19, 24小时制
now.getMinutes(); // 49, 分钟
now.getSeconds(); // 22, 秒
now.getMilliseconds(); // 875, 毫秒数
now.getTime(); // 1435146562875, 以number形式表示的时间戳

要获取当前时间戳可以用

if (Date.now) {
    alert(Date.now()); // 老版本IE没有now()方法
} else {
    alert(new Date().getTime());
}



function setCookie(name, value, day, path) {
    var str = name + "=" + escape(value);
    if (day != 0) {
        var date = new Date();
        var ms = day * 3600 * 1000 * 24;
        date.setTime(date.getTime() + ms);
        str += ';expires=' + date.toGMTString();
    }//undefined
    if (typeof (path) != 'undefined') {
        str += ';path=' + path
    }
    document.cookie = str;
}
//获取cookie
function getCookie(c_name)
{
    if (document.cookie.length > 0)
    {
        c_start = document.cookie.indexOf(c_name + "=")
        if (c_start != -1)
        {
            c_start = c_start + c_name.length + 1
            c_end = document.cookie.indexOf(";", c_start)
            if (c_end == -1)
                c_end = document.cookie.length
            return unescape(document.cookie.substring(c_start, c_end))
        }
    }
    return ""
}




//这两个函数可以与asp(Server.UrlEncode)、php(urlencode())很好的解码
var test1="http://www.wljcz.com/My first/";  
var bb=encodeURIComponent(test1);  
var nnow=decodeURIComponent(bb);  
document.write(bb+ "<br />");  
document.write(nnow);