js數組刪除,新增,元素刪除,事件綁定
javascript返回某個元素在數組中的索引值的indexOf方法–兼容所有瀏覽器
在現在代瀏覽器中判斷一個元素在不在一個數組中,咱們可以用Array對象的indexOf()方法來取得這個元素在當前數組中的索引值,若索引值不等于-1,數組中就存在這個元素,例如:
var arr = [2,53,23,'test',9,'array']; //判斷array在不在數組arr中 arr.indexOf('array') !== -1 ? alert('存在') : alert('不存在');
但是IE9以前的版本都不支持此方法,那咱們就只能擴展一個:
Array.prototype.indexOf = function(el){ for (var i=0,n=this.length; i<n; i++){ if (this[i] === el){ return i; } } return -1; }
下面咱們就來檢測一下各個瀏覽器的兼容性,代碼如下:
var arr = [2,53,23,'test',9,'array']; if(!Array.indexOf){ Array.prototype.indexOf = function(el){ for (var i=0,n=this.length; i<n; i++){ if (this[i] === el){ return i; } } return -1; } } arr.indexOf('array') !== -1 ? alert('存在') : alert('不存在');
上面就是用Array的indexOf方法來判斷數組中一個元素是否存在的方法。
數組根據索引刪除元素:
Array.prototype.del=function(n) { //n表示第幾項,從0開始算起。
//prototype為對象原型,注意這里為對象增加自定義方法的方法。
if(n<0) //如果n<0,則不進行任何操作。
return this;
else
return this.slice(0,n).concat(this.slice(n+1,this.length));
/*
concat方法:返回一個新數組,這個新數組是由兩個或更多數組組合而成的。
這里就是返回this.slice(0,n)/this.slice(n+1,this.length)
組成的新數組,這中間,剛好少了第n項。
slice方法: 返回一個數組的一段,兩個參數,分別指定開始和結束的位置。
*/
}
JS綁定事件
事件是用戶或瀏覽器自身進行的特定行為.這些事件都有自己的名字,如click(點擊),load(載入),mouseover(鼠標經過).用于響應某個事件而調用的函數稱為"事件處理函數"或者"事件監聽函數".事件處理函數有兩種分配方式:
1)在HTML頁面中:<div onclick="doSome()" />//點擊后執行JS代碼中已經定義好的函數:doSome;2)在JS中:
var oDiv = document.getElementByIdx_x("testDiv");
oDiv.onclick = function()
{
alert("我被點!");
}
注意:用這個分配方法時,事件處理函數名稱必須小寫:onclick,onmouseover
用其它方法綁定事件:
//兼容的方法
var EventUtil = new Object;
EventUtil.addEventHandler = function(oTarget, sEventType, fnhandler)
{
if(oTarget.addEventListener)
{
oTarget.addEventListener(sEventType, fnhandler, false);
}//這里用了對象檢測方法判斷瀏覽器,最后的參數false表示事件在捕獲階段,若為true則表示在冒泡階段
else if(oTarget.attachEvent)
{
oTarget.attachEvent("on" + sEventType, fnhandler);
}
else
{
oTarget["on" + sEventType] = fnhandler;
}
}
EventUtil.removeEventHandler = function(oTarget, sEventType, fnhandler)
{
if(oTarget.removeEventListener)
{
oTarget.removeEventListener(sEventType, fnhandler, false);
}
else if(oTarget.detachEvent)
{
oTarget.detachEvent("on" + sEventType, fnhandler);
}
else
{
oTarget["on" + sEventType] = null;
}
}
function handleClick()
{
alert(oDiv.style.backgroundColor);
// EventUtil.removeEventHandler(oDiv, "click", handleClick);
}
EventUtil.addEventHandler(oDiv, "click", handleClick);//添加事件
- for(var i=; i<6; i++){
- var alink = document.createElement_x('a');
- var titleText = document.createTextNode(' ' + (i+1) + ' ');
- alink.a(titleText);
- alink.href = "javascript:void(0)";
- alink.onclick = function(){alert(i)};
- var div = document.getElementById('show-detail');
- div.a(alink);
- }
- 你會發現每點擊一下,結果總是6。WHY? 這是javascript閉包特性所引起
-
解決問題:使用代理方法
添加下面代碼:
- function delegate(fn,params,obj){
- return function(){
- fn.call(obj||window,params);
- }
- }
-
再將 : alink.onclick = function(){alert(i)};
改為 :
var pFunc = function(i){alert(i)};
alink.onclick = delegate(pFunc,i,alink);即可。