日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

这些年,我收集的JavaScript代码(二)

發(fā)布時間:2025/4/16 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 这些年,我收集的JavaScript代码(二) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

一、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并去掉重復(fù)項

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; };//Demo var 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)的意義

  瀏覽器同時要做很多事,這些事情以隊列的方式存在,執(zhí)行JavaScript只是其中之一,setTimeout(fn, 0)表面上看是立即執(zhí)行的意思,但實際上只是在瀏覽器事件隊列中添加了一個新的事件,由于隊列是先進先出,所以fn會等等到當前隊列中的事件執(zhí)行完后再執(zhí)行。由于JavaScript的定時器回調(diào)函數(shù)是異步執(zhí)行的,所以產(chǎn)生的效果就是等頁面上同步事件(包括頁面渲染與同步JS代碼)執(zhí)行完之后再執(zhí)行。

  一個簡單的示例:

<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會報錯,因為頁面執(zhí)行到這里時還沒有img,但two卻可以。

五、增強版取URL中的參數(shù)

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; }// demo var myParam = getQueryString()["myParam"];

六、檢查一個object是否是jQuery object

if(obj instanceof jQuery)

七、檢查一個數(shù)是否為整數(shù)或浮點數(shù)

function isInt(n) {return typeof n === 'number' && n % 1 == 0; }// or ,this support ie3 function isInt(n) {return typeof n === 'number' && parseFloat(n) == parseInt(n, 10) && !isNaN(n); }function isFloat (n) {return n===+n && n!==(n|0); }

八、用JavaScript添加style節(jié)點

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);

九、如何跳出雙重循環(huán)

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()); });

十二、取數(shù)組中的最小值和最大值

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);

十三、取兩個數(shù)組交集

/* 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]

  注釋中已經(jīng)說明了,傳入的數(shù)組要已經(jīng)排過序的。

十四、統(tǒng)計一個字符串中某段子串出現(xiàn)的次數(shù)

var temp = "This is a string.";var count = temp.match(/is/g).length;

十五、方法返回多個值

//One var mValues= function(){ var a ="a"; var b = "b"; return [a, b]; };var values= mValues(); var valOne= values[0]; var valTwo = values[1];//Two var 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); }

  注意,如果數(shù)組中有0、false、""、null、NaN迭代器將會停止。

十七、根據(jù)日計算年齡

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 }

  這段代碼可以用來防止網(wǎng)頁被放入iframe中,不過如果別人定義了self和top變量覆蓋了瀏覽器默認值可能會失效。

十九、把arguments轉(zhuǎn)換為Array

var args = Array.prototype.slice.call(arguments, 0);

二十、日期格式化
  來源:javascript日期格式化函數(shù),跟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:52 console.log(d.toString("")); //2012-7-27 9:26:52 console.log(d.toString("yyyy-MM-dd HH:mm:ss")); //2012-07-27 09:26:52 console.log(d.toString("yyyy年MM月dd日 HH:mm:ss")); //2012年07月27日 09:26:52 console.log(d.toString("yyyy-MM-dd HH:mm:ss fff")); //2012-07-27 09:26:52 237 console.log(d.toString("yyyy年 MMM dd EEE")); //2012年 七月 27 星期五 console.log(d.toString("yyyy MMM dd EEE","en")); //2012 Jul 27 Fri

二十一、JavaScript正則中test小用法

var str="a12b123c1234e12345"; var reg=/a(\d{2})b(\d{3})c(\d{4})/; reg.test(str); console.log(RegExp.$1,RegExp.$2,RegExp.$3,RegExp.$4); // output:12 123 1234

二十二、JavaScript判斷瀏覽器類型及主版本

function getBrowserInfo(){var Sys = {};var ua = navigator.userAgent.toLowerCase();if (window.ActiveXObject){Sys.b="ie";Sys.v =parseInt(ua.match(/msie ([\d.]+)/)[1]);}else if (document.getBoxObjectFor){Sys.b="firefox";Sys.v =parseInt(ua.match(/firefox\/([\d.]+)/)[1]);}else if (window.MessageEvent && !document.getBoxObjectFor){Sys.b="chrome";Sys.v == parseInt(ua.match(/chrome\/([\d.]+)/)[1]);}else if (window.opera){Sys.b="opera";Sys.v == parseInt(ua.match(/opera.([\d.]+)/)[1]);}else if (window.openDatabase){Sys.b="safari";Sys.v == parseInt(ua.match(/version\/([\d.]+)/)[1]);}return Sys; }var bi=getBrowserInfo(); document.write("Browser:"+bi.b+" Version:"+bi.v);//Browser:ie Version:10

轉(zhuǎn)載于:https://www.cnblogs.com/jscode/archive/2012/07/27/2610613.html

總結(jié)

以上是生活随笔為你收集整理的这些年,我收集的JavaScript代码(二)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。