1. 程式人生 > >javascript 常用小技巧

javascript 常用小技巧

注意

第一行總是寫上’use strict’;是因為我們總是以嚴格模式執行JavaScript程式碼,避免各種潛在陷阱。

'use strict';
console.log('Hello, world.');

物件和字串的轉換

var obj = {a: 'aaa', b: 'bbb'};
var objStr = JSON.stringify(obj); // "{"a":"aaa","b":"bbb"}"
var newObj = JSON.parse(objStr); // {a: "aaa", b: "bbb"}

資料型別

underfined、null、0、false、NaN、空字串。他們的邏輯非結果均為true。

閉包格式W

好處:避免命名衝突(全域性變數汙染)。

(function(a, b) {
console.log(a+b); //30
})(10, 20);

擷取和清空陣列

var arr = [12, 222, 44, 88];
arr.length = 2; //擷取,arr = [12, 222]; 
arr.length = 0; //清空,arr will be equal to [].

獲取陣列的最大最小值

var numbers = [5, 45822, 120, -215];
var maxInNumbers = Math.max.apply(Math, numbers); //45822
var minInNumbers = Math.min.apply(Math, numbers); //-215

浮點數計算問題

0.1 + 0.2 == 0.3 //false
#為什麼呢?因為0.1+0.2等於0.30000000000000004。JavaScript的數字都遵循IEEE 754標準構建,在內部都是64位浮點小數表示。可以通過使用toFixed()來解決這個問題。

滾動滑鼠觸發事件

$(window).scroll(function() {
var a = $(window).scrollTop();
if(a > 100) {
$('.go-top').fadeIn();
}else {
$('.go-top').fadeOut();
}
});
$(".go-top").click(function(){
$("html,body").animate({scrollTop:"0px"},'600');
});

阻止冒泡

function stopBubble(e){
e = e || window.event; 
if(e.stopPropagation){
e.stopPropagation(); //W3C阻止冒泡方法 
}else { 
e.cancelBubble = true; //IE阻止冒泡方法 
} 
}

全部替換

var replaceAll = function(bigStr, str1, str2) { //把bigStr中的所有str1替換為str2
var reg = new RegExp(str1, 'gm');
return bigStr.replace(reg, str2);
}

獲取url的引數值

var getURLParam = function(name) {
return decodeURIComponent((new RegExp('[?|&]' + name + '=' + '([^&;]+?)(&|#|;|$)', "ig").exec(location.search) || [, ""])[1].replace(/\+/g, '%20')) || null;
};

深度拷貝物件

function cloneObj(obj) {
var o = obj.constructor == Object ? new obj.constructor() : new obj.constructor(obj.valueOf());
for(var key in obj){
if(o[key] != obj[key] ){
if(typeof(obj[key]) == 'object' ){
o[key] = mods.cloneObj(obj[key]);
}else{
o[key] = obj[key];
}
}
}
return o;
}

陣列去重

var unique = function(arr) {
var result = [], json = {};
for (var i = 0, len = arr.length; i < len; i++){
if (!json[arr[i]]) {
json[arr[i]] = 1;
result.push(arr[i]); //返回沒被刪除的元素
}
}
return result;
};

判斷陣列元素是否重複

var isRepeat = function(arr) { //arr是否有重複元素
var hash = {};
for (var i in arr) {
if (hash[arr[i]]) return true;
hash[arr[i]] = true;
}
return false;
};

生成隨機數

function randombetween(min, max){
 return min + (Math.random() * (max-min +1));
}

操作cookie

own.setCookie = function(cname, cvalue, exdays){
    var d = new Date();
    d.setTime(d.getTime() + (exdays*24*60*60*1000));
    var expires = 'expires='+d.toUTCString();
    document.cookie = cname + '=' + cvalue + '; ' + expires;
    };
    own.getCookie = function(cname) {
    var name = cname + '=';
    var ca = document.cookie.split(';');
    for(var i=0; i< ca.length; i++) {
    var c = ca[i];
    while (c.charAt(0) == ' ') c = c.substring(1);
    if (c.indexOf(name) != -1) return c.substring(name.length, c.length);
    }
    return '';
};

讓英文字串超出表格寬度自動換行

word-wrap: break-word; word-break: break-all; 

透明背景

<IFRAME src="1.htm" width=300 height=180 allowtransparency></iframe> 

獲得style內容

obj.style.cssText 

HTML標籤

document.documentElement.innerHTML 

第一個style標籤

document.styleSheets[0] 

style標籤裡的第一個樣式

document.styleSheets[0].rules[0] 

防止點選空連結時,頁面往往重置到頁首端。

<a href="javascript:function()">word</a> 

上一網頁源

asp: 
request.servervariables("HTTP_REFERER") 
javascript: 
document.referrer 

釋放記憶體

CollectGarbage(); 

禁止右鍵

document.oncontextmenu = function() { return false;} 

禁止儲存

<noscript><iframe src="*.htm"></iframe></noscript> 

禁止選取

<body oncontextmenu="return false" ondragstart="return false" onselectstart ="return false" onselect="document.selection.empty()" oncopy="document.selection.empty()" onbeforecopy="return false"onmouseup="document.selection.empty()> 

禁止貼上

<input type=text onpaste="return false"> 

位址列圖示

<link rel="Shortcut Icon" href="favicon.ico"> 
favicon.ico 名字最好不變16*16的16色,放虛擬目錄根目錄下 

收藏欄圖示

<link rel="Bookmark" href="favicon.ico"> 

檢視原始碼

<input type=button value=檢視網頁原始碼 onclick="window.location = 'view-source:'+ 'http://www.csdn.net/'"> 

關閉輸入法

<input style="ime-mode:disabled">

自動全選

<input type=text name=text1 value="123" onfocus="this.select()"> 

ENTER鍵可以讓游標移到下一個輸入框

<input onkeydown="if(event.keyCode==13)event.keyCode=9"> 

文字框的預設值

<input type=text value="123" onfocus="alert(this.defaultValue)"> 

獲得時間所代表的微秒

var n1 = new Date("2004-10-10".replace(/-/g, "\/")).getTime() 

視窗是否關閉

win.closed 

checkbox扁平

<input type=checkbox style="position: absolute; clip:rect(5px 15px 15px 5px)"><br> 

獲取選中內容

document.selection.createRange().duplicate().text 

自動完成功能

<input type=text autocomplete=on>開啟該功能 
<input type=text autocomplete=off>關閉該功能 

視窗最大化

<body onload="window.resizeTo(window.screen.width - 4,window.screen.height-50);window.moveTo(-4,-4)"> 

無關閉按鈕IE

window.open("aa.htm", "meizz", "fullscreen=7"); 

統一編碼/解碼

alert(decodeURIComponent(encodeURIComponent("http://你好.com?as= hehe"))) 
encodeURIComponent對":"、"/"、";" 和 "?"也編碼 

表格行指示

<tr onmouseover="this.bgColor='#f0f0f0'" onmouseout="this.bgColor='#ffffff'"> 

各種尺寸

s += "\r\n網頁可見區域寬:"+ document.body.clientWidth; 
s += "\r\n網頁可見區域高:"+ document.body.clientHeight; 
s += "\r\n網頁可見區域高:"+ document.body.offsetWeight +" (包括邊線的寬)"; 
s += "\r\n網頁可見區域高:"+ document.body.offsetHeight +" (包括邊線的寬)"; 
s += "\r\n網頁正文全文寬:"+ document.body.scrollWidth; 
s += "\r\n網頁正文全文高:"+ document.body.scrollHeight; 
s += "\r\n網頁被捲去的高:"+ document.body.scrollTop; 
s += "\r\n網頁被捲去的左:"+ document.body.scrollLeft; 
s += "\r\n網頁正文部分上:"+ window.screenTop; 
s += "\r\n網頁正文部分左:"+ window.screenLeft; 
s += "\r\n螢幕解析度的高:"+ window.screen.height; 
s += "\r\n螢幕解析度的寬:"+ window.screen.width; 
s += "\r\n螢幕可用工作區高度:"+ window.screen.availHeight; 
s += "\r\n螢幕可用工作區寬度:"+ window.screen.availWidth;

UNCODE編碼

escape() ,unescape 

事件源物件

event.srcElement.tagName 
event.srcElement.type 

捕獲釋放

event.srcElement.setCapture(); 
event.srcElement.releaseCapture(); 

事件按鍵

event.keyCode 
event.shiftKey 
event.altKey 
event.ctrlKey 

事件返回值

event.returnValue