查看“Javascript代码片段”的源代码
←
Javascript代码片段
跳转至:
导航
、
搜索
因为以下原因,你没有权限编辑本页:
您请求的操作仅限属于该用户组的用户执行:
用户
您可以查看并复制此页面的源代码:
==正则替换== <source lang="javascript"> name = '<p><span style="font-Size:16px;font-family:宋体;">办理公积金补缴手续。(广州深圳)</span></p>' + '<p><span style="font-family:宋体;font-size:16px">办理公积金补缴手续。(广州深圳)</span></p>' + '<p><span style="font-size:10px;font-family:宋体;">办理公积金补缴手续。(广州深圳)</span></p>' + '<p><span style="font-family:宋体;font-size:16PX">办理公积金补缴手续。(广州深圳)</span></p>'; uw = name.replace(/font-size:(\d+)px/ig, function (word, size) { return 'font-size:' + size * 2 + 'px'; } ); console.log(uw); </source> ==替换空行== <source lang="javascript"> data.articles_content.replace(/\n[ \t]*\n/gm, "|"); </source> ==扩展jquery,方便取href参数== <source lang="javascript"> (function($){ $.getUrlParam = function(name) { var reg = new RegExp("(^|&)"+ name +"=([^&]*)(&|$)"); var r = window.location.search.substr(1).match(reg); return (r !== null ? decodeURI(r[2]) : null); } })(jQuery); (function ($) { $.extend({ Request: function (m) { var sValue = location.search.match(new RegExp("[\?\&]" + m + "=([^\&]*)(\&?)", "i")); return sValue ? sValue[1] : sValue; }, UrlUpdateParams: function (url, name, value) { var r = url; if (r != null && r != 'undefined' && r != "") { value = encodeURIComponent(value); var reg = new RegExp("(^|)" + name + "=([^&]*)(|$)"); var tmp = name + "=" + value; if (url.match(reg) != null) { r = url.replace(eval(reg), tmp); } else { if (url.match("[\?]")) { r = url + "&" + tmp; } else { r = url + "?" + tmp; } } } return r; } }); })(jQuery); //使用示例 window.location.href = $.UrlUpdateParams(window.location.href, 'service', id); </source> ==检测页面上一个元素是否已经滚动到了屏幕的可视区域内== <source lang="javascript"> var top = obj.getBoundingClientRect().top //元素顶端到可见区域顶端的距离 var se = document.documentElement.clientHeight //浏览器可见区域高度。 if (top <= se ) { //code } </source> ==如何通过js来改变input 的type类型== 用户:<input type=text value="ayeah"><BR> 密码:<span id="pass"><input type=password id=pw name="pw" value="www.ayeah.com"></span><INPUT TYPE="checkbox" id="showPass" onclick="var temp=document.getElementById('pw').value;if(this.checked){document.getElementById('pass').innerHTML='<input type=text id=pw name=pw>';}else{document.getElementById('pass').innerHTML='<input type=password id=pw name=pw>';} document.getElementById('pw').value=temp;">显示密码 ==为了安全起见,密码框不能选取,复制,粘贴== onselectstart="return false" 禁止选取、防止复制 onpaste="return false" 禁止粘贴 ==localstorage兼容ie8以下浏览器的问题== IE8下要么cookie,要么userData 敲了几个小时的键盘,反复调试后,这段代码终于可以用了。(代码在下面) 使用方法: # 把这段代码放在第一个进行本地存储的语句之前的任何位置; # 代码必须在<html>标签内; # 不能将本地变量名设为"userdata_record" # 不能以 userdataobj 命名变量 # 加入代码后,如果不使用localStorage.length和localStorage.key( i ),那么你就完全按照localStorage的使用方法进行本地存储就可以了。 如果有问题欢迎和我联系。 最后想发一声感慨:微软的东西真是烂呀,难怪有人说微软是信息时代的一场灾难。 <source lang="javascript"> <script language="JavaScript" type="text/javascript"> if (typeof (localStorage) == 'undefined') { var box = document.body || document.getElementsByTagName("head")[0] || document.documentElement; userdataobj = document.createElement('input'); userdataobj.type = "hidden"; userdataobj.addBehavior("#default#userData"); box.appendChild(userdataobj); //设定对象 var localStorage = { setItem: function (nam, val) { userdataobj.load(nam); userdataobj.setAttribute(nam, val); var d = new Date(); d.setDate(d.getDate() + 700); userdataobj.expires = d.toUTCString(); userdataobj.save(nam); userdataobj.load("userdata_record"); var dt = userdataobj.getAttribute("userdata_record"); if (dt == null) dt = ''; dt = dt + nam + ","; userdataobj.setAttribute("userdata_record", dt); userdataobj.save("userdata_record"); }, //模拟 setItem getItem: function (nam) { userdataobj.load(nam); return userdataobj.getAttribute(nam); }, //模拟 getItem removeItem: function (nam) { userdataobj.load(nam); clear_userdata(nam) userdataobj.load("userdata_record"); var dt = userdataobj.getAttribute("userdata_record"); var reg = new RegExp(nam + ",", "g"); dt = dt.replace(reg, ''); var d = new Date(); d.setDate(d.getDate() + 700); userdataobj.expires = d.toUTCString(); userdataobj.setAttribute("userdata_record", dt); userdataobj.save("userdata_record"); }, //模拟 removeItem clear: function () { userdataobj.load("userdata_record"); var dt = userdataobj.getAttribute("userdata_record") .split(","); for (var i in dt) { if (dt[i] != '') clear_userdata(dt[i]) } clear_userdata("userdata_record") } //模拟 clear(); } function clear_userdata(keyname) //将名字为keyname的变量消除 { var keyname; var d = new Date(); d.setDate(d.getDate() - 1); userdataobj.load(keyname); userdataobj.expires = d.toUTCString(); userdataobj.save(keyname); } } </script> </source> ==HTML5 LocalStorage 本地存储== 说到本地存储,这玩意真是历尽千辛万苦才走到HTML5这一步,之前的历史大概如下图所示: http://pic002.cnblogs.com/images/2011/219983/2011052411382518.jpg 最早的Cookies自然是大家都知道,问题主要就是太小,大概也就4KB的样子,而且IE6只支持每个域名20个cookies,太少了。优势就是大家都支持,而且支持得还蛮好。很早以前那些禁用cookies的用户也都慢慢的不存在了,就好像以前禁用javascript的用户不存在了一样。 userData是IE的东西,垃圾。现在用的最多的是Flash吧,空间是Cookie的25倍,基本够用。再之后Google推出了Gears,虽然没有限制,但不爽的地方就是要装额外的插件(没具体研究过)。到了HTML5把这些都统一了,官方建议是每个网站5MB,非常大了,就存些字符串,足够了。比较诡异的是居然所有支持的浏览器目前都采用的5MB,尽管有一些浏览器可以让用户设置,但对于网页制作者来说,目前的形势就5MB来考虑是比较妥当的。 http://pic002.cnblogs.com/images/2011/219983/2011052411384081.jpg 支持的情况如上图,IE在8.0的时候就支持了,非常出人意料。不过需要注意的是,IE、Firefox测试的时候需要把文件上传到服务器上(或者localhost),直接点开本地的HTML文件,是不行的。 首先自然是检测浏览器是否支持本地存储。在HTML5中,本地存储是一个window的属性,包括localStorage和sessionStorage,从名字应该可以很清楚的辨认二者的区别,前者是一直存在本地的,后者只是伴随着session,窗口一旦关闭就没了。二者用法完全相同,这里以localStorage为例。 <source lang="javascript"> if(window.localStorage){ alert('This browser supports localStorage'); }else{ alert('This browser does NOT support localStorage'); } </source> 存储数据的方法就是直接给window.localStorage添加一个属性,例如:window.localStorage.a 或者 window.localStorage["a"]。它的读取、写、删除操作方法很简单,是以键值对的方式存在的,如下: <source lang="javascript"> localStorage.a = 3; //设置a为"3" localStorage["a"] = "sfsf"; //设置a为"sfsf",覆盖上面的值 localStorage.setItem("b","isaac"); //设置b为"isaac" var a1 = localStorage["a"]; //获取a的值 var a2 = localStorage.a; //获取a的值 var b = localStorage.getItem("b"); //获取b的值 localStorage.removeItem("c"); //清除c的值 </source> 这里最推荐使用的自然是getItem()和setItem(),清除键值对使用removeItem()。如果希望一次性清除所有的键值对,可以使用clear()。另外,HTML5还提供了一个key()方法,可以在不知道有哪些键值的时候使用,如下: <source lang="javascript"> var storage = window.localStorage; function showStorage(){ for(var i=0;i<storage.length;i++){ //key(i)获得相应的键,再用getItem()方法获得对应的值 document.write(storage.key(i)+ " : " + storage.getItem(storage.key(i)) + "<br>"); } } </source> 写一个最简单的,利用本地存储的计数器: <source lang="javascript"> var storage = window.localStorage; if (!storage.getItem("pageLoadCount")) storage.setItem("pageLoadCount",0); storage.pageLoadCount = parseInt(storage.getItem("pageLoadCount")) + 1;//必须格式转换 document.getElementByIdx_x("count").innerHTML = storage.pageLoadCount; showStorage(); </source> 不断刷新就能看到数字在一点点上涨,如下图所示: http://pic002.cnblogs.com/images/2011/219983/2011052411385178.jpg 需要注意的是,HTML5本地存储只能存字符串,任何格式存储的时候都会被自动转为字符串,所以读取的时候,需要自己进行类型的转换。这也就是上一段代码中parseInt必须要使用的原因。 另外,在iPhone/iPad上有时设置setItem()时会出现诡异的QUOTA_EXCEEDED_ERR错误,这时一般在setItem之前,先removeItem()就ok了。 HTML5的本地存储,还提供了一个storage事件,可以对键值对的改变进行监听,使用方法如下: <source lang="javascript"> if(window.addEventListener){ window.addEventListener("storage",handle_storage,false); }else if(window.attachEvent){ window.attachEvent("onstorage",handle_storage); } function handle_storage(e){ if(!e){e=window.event;} //showStorage(); } </source> 对于事件变量e,是一个StorageEvent对象,提供了一些实用的属性,可以很好的观察键值对的变化。 ==js正则表达式== <source lang="javascript"> //邮箱验证正则 var email = 'jinshui.xie@163.com'; var re = /^([a-zA-Z0-9]+[_|\_|\.]?)*[a-zA-Z0-9]+@([a-zA-Z0-9]+[_|\_|\.]?)*[a-zA-Z0-9]+\.[a-zA-Z]{2,3}$/; if ( ! re.test(email)) { $('#check_msg').html('您输入的邮箱错误'); return false; } //验证手机号 function validate_mobile(mobile) { var mobile_no = /^(((1[0-9]{2}))+\d{8})$/; return mobile_no.test(mobile); } </source> 利用正则表达式限制网页表单里的文本框输入内容: 2.用正则表达式限制只能输入数字:onkeyup="value=value.replace(/[^\d]/g,'') "onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\d]/g,''))" 3.用正则表达式限制只能输入数字和英文:onkeyup="value=value.replace(/[\W]/g,'') "onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\d]/g,''))" 4.计算字符串的长度(一个双字节字符长度计2,ASCII字符计1) String.prototype.len=function(){return this.replace([^\x00-\xff]/g,"aa").length;} ==使用jQuery判断获取到的页面元素是否为空== 通过jQuery选择器获取到的永远是一个对象,即使页面上根本没有该元素。因此,如果要使用jQuery检查元素再给某个页面上是否存在的时候,不能使用以下代码: if ($("#tt")) { //do sth. } 而应该通过获取到的元素的长度来判断,代码如下: if ($("#tt").length > 0) { //do sth. } 或者通过转换成JavaScript对象的方式来进行处理: if ($("#tt")[0]) { //do sth. } ==js数组的in_array函数== PHP的数组函数in_array()非常方便,可JS就不是了。其实我很不喜欢JS的数组~ 别说了,直接上方法 Array.prototype.in_array = function(e) { for(i=0;i<this.length;i++) { if(this[i] == e) return true; } return false; } var f = Math.round(x*100)/100; //保留两位小数 http://jashkenas.github.com/coffee-script/ ==根据IP取城市新浪接口== <source lang="php"> <script> $(function(){ $(".ip2place").each(function(){ var ip2place = $(this); $.getScript('http://int.dpool.sina.com.cn/iplookup/iplookup.php?format=js&ip='+$(this).html(), function(){ if (remote_ip_info.ret == 1) { ip2place.html(remote_ip_info.province + ' ' + remote_ip_info.city); } }); }); }); </script> </source> ==javascript之数组操作== ;数组的创建 var arrayObj = new Array(); //创建一个数组 var arrayObj = new Array([size]); //创建一个数组并指定长度,注意不是上限,是长度 var arrayObj = new Array([element0[, element1[, ...[, elementN]]]]); 创建一个数组并赋值 要说明的是,虽然第二种方法创建数组指定了长度,但实际上所有情况下数组都是变长的,也就是说即使指定了长度为5,仍然可以将元素存储在规定长度以外的,注意:这时长度会随之改变。 ;数组的元素的访问 var testGetArrValue=arrayObj[1]; //获取数组的元素值 arrayObj[1]= "这是新值"; //给数组元素赋予新的值 ;数组元素的添加 arrayObj. push([item1 [item2 [. . . [itemN ]]]]);// 将一个或多个新元素添加到数组结尾,并返回数组新长度 arrayObj.unshift([item1 [item2 [. . . [itemN ]]]]);// 将一个或多个新元素添加到数组开始,数组中的元素自动后移,返回数组新长度 arrayObj.splice(insertPos,0,[item1[, item2[, . . . [,itemN]]]]);//将一个或多个新元素插入到数组的指定位置,插入位置的元素自动后移,返回""。 ;数组元素的删除 arrayObj.pop(); //移除最后一个元素并返回该元素值 arrayObj.shift(); //移除最前一个元素并返回该元素值,数组中元素自动前移 arrayObj.splice(deletePos,deleteCount); //删除从指定位置deletePos开始的指定数量deleteCount的元素,数组形式返回所移除的元素 ;数组的截取和合并 arrayObj.slice(start, [end]); //以数组的形式返回数组的一部分,注意不包括 end 对应的元素,如果省略 end 将复制 start 之后的所有元素 arrayObj.concat([item1[, item2[, . . . [,itemN]]]]); //将多个数组(也可以是字符串,或者是数组和字符串的混合)连接为一个数组,返回连接好的新的数组 ;数组的拷贝 arrayObj.slice(0); //返回数组的拷贝数组,注意是一个新的数组,不是指向 arrayObj.concat(); //返回数组的拷贝数组,注意是一个新的数组,不是指向 ;数组元素的排序 arrayObj.reverse(); //反转元素(最前的排到最后、最后的排到最前),返回数组地址 arrayObj.sort(); //对数组元素排序,返回数组地址 ;数组元素的字符串化 arrayObj.join(separator); //返回字符串,这个字符串将数组的每一个元素值连接在一起,中间用 separator 隔开。 toLocaleString 、toString 、valueOf:可以看作是join的特殊用法,不常用 ==数组对象的3个属性== ;length 属性 Length属性表示数组的长度,即其中元素的个数。因为数组的索引总是由0开始,所以一个数组的上下限分别是:0和length-1。和其他大多数语言不同的是,JavaScript数组的length属性是可变的,这一点需要特别注意。当length属性被设置得更大时,整个数组的状态事实上不会发生变化,仅仅是length属性变大;当length属性被设置得比原来小时,则原先数组中索引大于或等于length的元素的值全部被丢失。下面是演示改变length属性的例子: var arr=[12,23,5,3,25,98,76,54,56,76]; //定义了一个包含10个数字的数组 alert(arr.length); //显示数组的长度10 arr.length=12; //增大数组的长度 alert(arr.length); //显示数组的长度已经变为12 alert(arr[8]); //显示第9个元素的值,为56 arr.length=5; //将数组的长度减少到5,索引等于或超过5的元素被丢弃 alert(arr[8]); //显示第9个元素已经变为"undefined" arr.length=10; //将数组长度恢复为10 alert(arr[8]); //虽然长度被恢复为10,但第9个元素却无法收回,显示"undefined" 由上面的代码我们可以清楚的看到length属性的性质。但length对象不仅可以显式的设置,它也有可能被隐式修改。JavaScript中可以使用一个未声明过的变量,同样,也可以使用一个未定义的数组元素(指索引超过或等于length的元素),这时,length属性的值将被设置为所使用元素索引的值加1。例如下面的代码: var arr=[12,23,5,3,25,98,76,54,56,76]; alert(arr.length); arr[15]=34; alert(arr.length); 代码中同样是先定义了一个包含10个数字的数组,通过alert语句可以看出其长度为10。随后使用了索引为15的元素,将其赋值为15,即arr[15]=34,这时再用alert语句输出数组的长度,得到的是16。无论如何,对于习惯于强类型编程的开发人员来说,这是一个很令人惊讶的特性。事实上,使用new Array()形式创建的数组,其初始长度就是为0,正是对其中未定义元素的操作,才使数组的长度发生变化。 由上面的介绍可以看到,length属性是如此的神奇,利用它可以方便的增加或者减少数组的容量。因此对length属性的深入了解,有助于在开发过程中灵活运用。 ;prototype 属性 返回对象类型原型的引用。prototype 属性是 object 共有的。 objectName.prototype objectName 参数是object对象的名称。 说明:用 prototype 属性提供对象的类的一组基本功能。 对象的新实例“继承”赋予该对象原型的操作。 对于数组对象,以以下例子说明prototype 属性的用途。 给数组对象添加返回数组中最大元素值的方法。要完成这一点,声明一个函数,将它加入 Array.prototype, 并使用它。 function array_max( ) { var i, max = this[0]; for (i = 1; i < this.length; i++) { if (max < this[i]) max = this[i]; } return max; } Array.prototype.max = array_max; var x = new Array(1, 2, 3, 4, 5, 6); var y = x.max( ); 该代码执行后,y 保存数组 x 中的最大值,或说 6。 ;constructor 属性 表示创建对象的函数。 object.constructor //object是对象或函数的名称。 说明:constructor 属性是所有具有 prototype 的对象的成员。它们包括除 Global 和 Math 对象以外的所有 JScript 固有对象。constructor 属性保存了对构造特定对象实例的函数的引用。 例如: x = new String("Hi"); if (x.constructor == String) // 进行处理(条件为真)。 或 function MyFunc { // 函数体。 } y = new MyFunc; if (y.constructor == MyFunc) // 进行处理(条件为真)。 ==js去掉字符串中的最后一个字符== <source lang="javascript"> var str="aaaaaaaaaaaaaaaaaa|"; var texts=str.substr(0, str.length-1); alert(texts); </source> ==JS数组定义== 数组有四种定义的方式: <source lang="javascript"> //使用构造函数 var a = new Array(); var b = new Array(8); var c = new Array("first", "second", "third"); //数组直接量 var d = ["first", "second", "third"]; </source> ==这些年,我收集的JavaScript代码== 一、JavaScript跨平台事件 对于跨平台事件我们一般这么写(只例举添加事件): function addEventHandler(oTarget, sEventType, fnHandler){ if(oTarget.addEventListener){ oTarget.addEventListener(sEventType,fnHandler,false); } else if(oTarget.attachEvent){ oTarget.attachEvent("on"+sEventType,fnHandler); } else{ oTarget["on"+sEventType]=fnHandler; }} 那么下面这段代码的效果是什么样的呢? <div id="test">Test</div>...var oDiv=document.getElementById("test");addEventHandler(oDiv,"mouseover",function(){ alert("over "+this.id);}); 由于IE的this问题,在IE中果断地弹出了 over undefined,所以跨平台的事件更好的写法是这样的: function addEventHandler(oTarget, sEventType, fnHandler){ if(oTarget.addEventListener){ oTarget.addEventListener(sEventType,fnHandler,false); } else if(oTarget.attachEvent){ oTarget.attachEvent("on"+sEventType,function(){ return fnHandler.call(oTarget,window.event); }); } else{ oTarget["on"+sEventType]=fnHandler; }} 二、合并两个Array并去掉重复项 Array.prototype.unique = function() { var a = this.concat(); for(var i=0; i<a.length; ++i) { for(var j=i+1; j<a.length; ++j) { if(a[i] === a[j]) a.splice(j, 1); } } return a;};//Demovar array1 = ["a","b"];var array2 = ["b", "c"];var array3 = array1.concat(array2).unique();// ["a","b","c"] 三、typeof === "undefined" vs. != null if(typeof neverDeclared == "undefined") //no errorsif(neverDeclared == null) //throws ReferenceError: neverDeclared is not defined so,typeof === "undefined" is better! 四、setTimeout(fn, 0)的意义 浏览器同时要做很多事,这些事情以队列的方式存在,执行JavaScript只是其中之一,setTimeout(fn, 0)表面上看是立即执行的意思,但实际上只是在浏览器事件队列中添加了一个新的事件,由于队列是先进先出,所以fn会等等到当前队列中的事件执行完后再执行。由于JavaScript的定时器回调函数是异步执行的,所以产生的效果就是等页面上同步事件(包括页面渲染与同步JS代码)执行完之后再执行。 一个简单的示例: <script type="text/javascript"> //one document.getElementById("imgTest").style.borderBottom="5px solid #000"; //two setTimeout(function(){ document.getElementById("imgTest").style.borderBottom="5px solid #000"; }, 0);</script><img src="http://jscode.chinacxy.com/img_lib/m_400_600_01.jpg" id="imgTest" alt=""/> one会报错,因为页面执行到这里时还没有img,但two却可以。 五、增强版取URL中的参数 function getQueryString() { var result = {}, queryString = location.search.substring(1), re = /([^&=]+)=([^&]*)/g, m; while (m = re.exec(queryString)) { result[decodeURIComponent(m[1])] = decodeURIComponent(m[2]); } return result;}// demovar myParam = getQueryString()["myParam"]; 六、检查一个object是否是jQuery object if(obj instanceof jQuery) 七、检查一个数是否为整数或浮点数 function isInt(n) { return typeof n === 'number' && n % 1 == 0;}// or ,this support ie3function isInt(n) { return typeof n === 'number' && parseFloat(n) == parseInt(n, 10) && !isNaN(n);}function isFloat (n) { return n===+n && n!==(n|0);} 八、用JavaScript添加style节点 var css = 'h1 { background: red; }', head = document.getElementsByTagName('head')[0], style = document.createElement('style');style.type = 'text/css';if(style.styleSheet){ style.styleSheet.cssText = css;}else{ style.appendChild(document.createTextNode(css));}head.appendChild(style); 九、如何跳出双重循环 function foo (){ dance: for(var k = 0; k < 4; k++){ for(var m = 0; m < 4; m++){ if(m == 2){ break dance; } } }} 十、把一个Array追加到另一个Array上 var a=[1,2],b=[3,4,5];a.push.apply(a,b);/*a: [1, 2, 3, 4, 5]*/ 十一、用jQuery把页面上的一个tag换成另一个tag 如把页面上所有的code换为pre: <code> A </code><code> B </code><code> C </code>//change to<pre> A </pre><pre> A </pre><pre> A </pre> jQuery代码: $('code').contents().unwrap().wrap('<pre/>');//or$('code').replaceWith(function(){ return $("<pre />").append($(this).contents());}); 十二、取数组中的最小值和最大值 var arr = new Array();arr[0] = 100;arr[1] = 0;arr[2] = 50;var min = Math.min.apply(null, arr), max = Math.max.apply(null, arr); 十三、取两个数组交集 /* finds the intersection of * two arrays in a simple fashion. * * PARAMS * a - first array, must already be sorted * b - second array, must already be sorted * * NOTES * * Should have O(n) operations, where n is * n = MIN(a.length(), b.length()) */function arrayIntersection(a, b){ var ai=0, bi=0; var result = new Array(); while( ai < a.length && bi < b.length ) { if (a[ai] < b[bi] ){ ai++; } else if (a[ai] > b[bi] ){ bi++; } else /* they're equal */ { result.push(a[ai]); ai++; bi++; } } return result;}console.log(arrayIntersection([1,2,3],[2,3,4,5,6]));//[2,3] 注释中已经说明了,传入的数组要已经排过序的。 十四、统计一个字符串中某段子串出现的次数 var temp = "This is a string.";var count = temp.match(/is/g); 十五、方法返回多个值 //Onevar mValues= function(){ var a ="a"; var b = "b"; return [a, b]; };var values= mValues();var valOne= values[0];var valTwo = values[1];//Twovar mValues= function(){ var a= "a"; var b = "b"; return { 'a': a, 'b': b }; };var values= mValues();var valOne= values.a;var valTwo = values.b; 十六、Array迭代器 function createIterator(x) { var i = 0; return function(){ return x[i++]; };}var iterator=createIterator(['a','b','c','d','e','f','g']);var current;while(current=iterator()){ console.log(current);} 注意,如果数组中有0、false、""、null、NaN迭代器将会停止。 十七、根据日计算年龄 function getAge(dateString) { var today = new Date(); var birthDate = new Date(dateString); var age = today.getFullYear() - birthDate.getFullYear(); var m = today.getMonth() - birthDate.getMonth(); if (m < 0 || (m === 0 && today.getDate() < birthDate.getDate())) { age--; } return age;} console.log(getAge("2005,8,1"));//6 十八、判断当前页面是否被放入了iframe中 if(self==top){ //not in iframe}else{ //in iframe} 这段代码可以用来防止网页被放入iframe中,不过如果别人定义了self和top变量覆盖了浏览器默认值可能会失效。 十九、把arguments转换为Array var args = Array.prototype.slice.call(arguments, 0); 二十、日期格式化 来源:javascript日期格式化函数,跟C#中的使用方法类似 Date.prototype.toString=function(format,loc){ var time={}; time.Year=this.getFullYear(); time.TYear=(""+time.Year).substr(2); time.Month=this.getMonth()+1; time.TMonth=time.Month<10?"0"+time.Month:time.Month; time.Day=this.getDate(); time.TDay=time.Day<10?"0"+time.Day:time.Day; time.Hour=this.getHours(); time.THour=time.Hour<10?"0"+time.Hour:time.Hour; time.hour=time.Hour<13?time.Hour:time.Hour-12; time.Thour=time.hour<10?"0"+time.hour:time.hour; time.Minute=this.getMinutes(); time.TMinute=time.Minute<10?"0"+time.Minute:time.Minute; time.Second=this.getSeconds(); time.TSecond=time.Second<10?"0"+time.Second:time.Second; time.Millisecond=this.getMilliseconds(); time.Week=this.getDay(); var MMMArrEn=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]; var MMMArr=["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"]; var WeekArrEn=["Sun","Mon","Tue","Web","Thu","Fri","Sat"]; var WeekArr=["星期日","星期一","星期二","星期三","星期四","星期五","星期六"]; var oNumber=time.Millisecond/1000; if(format!=undefined && format.replace(/\s/g,"").length>0){ if(loc!=undefined && loc =="en"){ MMMArr=MMMArrEn.slice(0); WeekArr=WeekArrEn.slice(0); } format=format .replace(/yyyy/ig,time.Year) .replace(/yyy/ig,time.Year) .replace(/yy/ig,time.TYear) .replace(/y/ig,time.TYear) .replace(/MMM/g,MMMArr[time.Month-1]) .replace(/MM/g,time.TMonth) .replace(/M/g,time.Month) .replace(/dd/ig,time.TDay) .replace(/d/ig,time.Day) .replace(/HH/g,time.THour) .replace(/H/g,time.Hour) .replace(/hh/g,time.Thour) .replace(/h/g,time.hour) .replace(/mm/g,time.TMinute) .replace(/m/g,time.Minute) .replace(/ss/ig,time.TSecond) .replace(/s/ig,time.Second) .replace(/fff/ig,time.Millisecond) .replace(/ff/ig,oNumber.toFixed(2)*100) .replace(/f/ig,oNumber.toFixed(1)*10) .replace(/EEE/g,WeekArr[time.Week]); } else{ format=time.Year+"-"+time.Month+"-"+time.Day+" "+time.Hour+":"+time.Minute+":"+time.Second; } return format;}var d=new Date();console.log(d.toString()); //2012-7-27 9:26:52console.log(d.toString("")); //2012-7-27 9:26:52console.log(d.toString("yyyy-MM-dd HH:mm:ss")); //2012-07-27 09:26:52console.log(d.toString("yyyy年MM月dd日 HH:mm:ss")); //2012年07月27日 09:26:52console.log(d.toString("yyyy-MM-dd HH:mm:ss fff")); //2012-07-27 09:26:52 237console.log(d.toString("yyyy年 MMM dd EEE")); //2012年 七月 27 星期五console.log(d.toString("yyyy MMM dd EEE","en")); //2012 Jul 27 Fri ==Js控制css-模仿视频网站关灯开灯== <source lang="html5"> <head> <style type="text/css"> .day { background-color:White; } .night { background-color:Black; } </style> <script type="text/javascript"> function SwitchLight() { var btn = document.getElementByIdx_x("btnChange"); if (document.body.className == "night") { document.body.className = "day"; btn.value = "关灯"; } else if (document.body.className == "day") { document.body.className = "night"; btn.value = "开灯"; } } </script> </head> <body class="night"> <input id="btnChange" type="button" value="开灯" onclick="SwitchLight()" /> </body> </source> ==JS动态加载JavaScript和Css== <source lang="javascript"> <script language="javascript" type="text/javascript"> function AddCSS(filePath) { var htmlHead = document.getElementsByTagName("head")[0]; var css = document.createElement("link"); css.setAttribute("type", "text/css"); css.setAttribute("rel", "Stylesheet"); css.setAttribute("href", filePath); htmlHead.appendChild(css); css.onreadystatechange = function () { if (css.readyState == "complete") { alert("css onreadystatechange"); } } css.onload = function () { alert("cssonload"); } } function AddJS(filePath) { var htmlHead = document.getElementsByTagName("head")[0]; var js = document.createElement("script"); js.setAttribute("type", "text/javascript"); js.setAttribute("language", "javascript"); js.setAttribute("src", filePath); htmlHead.appendChild(js); js.onreadystatechange = function () { if (js.readyState == "complete") { alert("js onreadystatechange"); } } js.onload = function () { alert("jsonload"); } } </script> </source> ==怎样用js判断一个图片文件是否存在?== <source lang="html5"> <img src="原图片" alt="图片" onerror="this.src='替换图片'"> </source> ==Javascript返回上一页== #Javascript返回上一页 history.go(-1), 返回两个页面: history.go(-2); #history.back(). #window.history.forward()返回下一页 #window.history.go(返回第几页,也可以使用访问过的URL) ==Javascript刷新页面的几种方法== #history.go(0) #location.reload() #location=location #location.assign(location) #document.execCommand('Refresh') #window.navigate(location) #location.replace(location) #document.URL=location.href ;自动刷新页面的方法 1.页面自动刷新:把如下代码加入<head>区域中,其中20指每隔20秒刷新一次页面. <meta http-equiv="refresh" content="20"> 2.页面自动跳转:把如下代码加入<head>区域中, 其中20指隔20秒后跳转到http://www.wyxg.com页面 <meta http-equiv="refresh" content="20;url=http://www.wyxg.com"> 3.页面自动刷新js版 <source lang="javascript"> <script language="JavaScript"> function myrefresh() { window.location.reload(); } setTimeout('myrefresh()',1000); //指定1秒刷新一次 </script> </source> [[category:javascript]] ==JS跳转页面参考代码大全== 假设当前的 URL 是: http://example.com:1234/test.htm#part2: location.herf:得到的是完整的url:http://example.com:1234/test.htm#part2 document.URL;得到实际url:http://example.com:1234/test.htm 第一种: <script language="javascript" type="text/javascript"> window.location.href="login.jsp?backurl="+window.location.href; </script> 第二种: <script language="javascript"> alert("返回"); window.history.back(-1); </script> 第三种: <script language="javascript"> window.navigate("top.jsp"); </script> 第四种: <script language="JavaScript"> self.location=’top.htm’; </script> 第五种: <script language="javascript"> alert("非法访问!"); top.location=’xx.jsp’; </script> 今天利用self.location自身页面跳转,实现页面锚点的自身定位,避免了a标签的二次点击,感觉真的很实用。 ==代码片断== <source lang="javascript"> $(".selector").find("option:selected").text(); //获取当前选中项的text parseFloat(rtime); //字符转数字 var obj = JSON.parse(str); //由JSON字符串转换为JSON对象 //渐隐删除 $('#tr_product_id_' + rec_id).fadeOut(1000, function () { //这三个操作,要放在回调函数中,不然没有动态效果。 $('#tr_product_id_' + rec_id).remove(); $('table tr').removeClass('dual'); $('table tr:nth-child(even)').addClass('dual'); }); //渐隐变色 $('#plan_vote_' + plan_id).fadeOut(1000, function () { //这个操作,要放在回调函数中,不然没有动态效果。 $('#plan_vote_' + plan_id).show(); $('#plan_vote_' + plan_id).css('color', '#058EBB'); }); setTimeout("window.location.href ='"+ $(item).attr('_href')+"'", time_delay); </source> ==js判断输入是否为正整数、浮点数等数字的函数== 1.下面列出了一些判读数值类型的正则表达式 "^\\d+$" //非负整数(正整数 + 0) "^[0-9]*[1-9][0-9]*$" //正整数 "^((-\\d+)|(0+))$" //非正整数(负整数 + 0) "^-[0-9]*[1-9][0-9]*$" //负整数 "^-?\\d+$" //整数 "^\\d+(\\.\\d+)?$" //非负浮点数(正浮点数 + 0) "^(([0-9]+\\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\\.[0-9]+)|([0-9]*[1-9][0-9]*))$" //正浮点数 "^((-\\d+(\\.\\d+)?)|(0+(\\.0+)?))$" //非正浮点数(负浮点数 + 0) "^(-(([0-9]+\\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\\.[0-9]+)|([0-9]*[1-9][0-9]*)))$" //负浮点数 "^(-?\\d+)(\\.\\d+)?$" //浮点数 2.在程序中的使用方法 var r = /^[0-9]*[1-9][0-9]*$/ //正整数 r.test(str); //str为你要判断的字符 执行返回结果 true 或 false 3. 测试正则的一个函数,可以用来判断 数字 字符 日期 Email 的 js函数 function TestRgexp(re, s){ // 参数说明 re 为正则表达式 s 为要判断的字符 return re.test(s) } 4. 函数应用 <script type="text/javascript"> function TestRgexp(re, s){ // 参数说明 re 为正则表达式 s 为要判断的字符 return re.test(s) } var re = /^[0-9]*[1-9][0-9]*$/ ; //判断是否是正整数 注: 程序中正则表达式格式: /上面的正则表达式(不带双引号)/ var s = prompt("请输入要判断的字符" , 10) ; var result = TestRgexp(re , s); //测试 返回true或false alert(result); </script> ==js中document.all的含义== 2008年09月21日 星期日 10:55document.all是IE 4.0及以上版本的专有属性,是一个表示当前文档的所有对象的娄组,不仅包括页面上可见的实体对象,还包括一些不可见的对象,比如html注释等等。在 document.all数组里面,元素不分层次,是按照其在文档中出现的先后顺序,平行地罗列的。所以可以用数字索引来引用到任何一个元素。但比较常用的是用对象id来引用一个特定的对象,比如document.all["element"]这样。 但是,也只有ie核心的浏览器才支持。 所以,可以用if(document.all)来对浏览器进行判别。 if(document.all) 判断是否使用的是ie内核,现在行业中使用的浏览器内核有好几种,每种浏览器又有自己的标准,所以有些时候,必须先判断浏览器,然后根据浏览器给出相应的处理方式,document.all一般只在ie内核的浏览器(如ie,myie,tt)中出现,document.layers在ns浏览器中使用。 而if(!document.all)与上面相反,表示如果没有使用ie内核就return一个值。 ==如何用JS弹出“有输入框并带有是、否、取消按钮”的对话框== <source lang="javascript"> <script type="text/javascript"> function diag() { var str = prompt("随便写点儿啥吧","比如我叫啥"); if (str) { alert("您刚输入的是:" + str); } } </script> </source> [[category:javascript]]
返回
Javascript代码片段
。
导航菜单
个人工具
登录
命名空间
页面
讨论
变种
视图
阅读
查看源代码
查看历史
更多
搜索
导航
首页
最近更改
随机页面
帮助
工具
链入页面
相关更改
特殊页面
页面信息