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 循环中动态添加事件:
  1. for(var i=; i<6; i++){  
  2.             var alink = document.createElement_x(‘a’);  
  3.             var titleText = document.createTextNode(‘ ‘ + (i+1) + ‘ ‘);  
  4.             alink.a(titleText);  
  5.             alink.href = “javascript:void(0)”;  
  6.             alink.onclick = function(){alert(i)};  
  7.             var div = document.getElementById(‘show-detail’);         
  8.             div.a(alink);  
  9.         }  
  10. 你会发现每点击一下,结果总是6。WHY? 这是javascript闭包特性所引起
  11. 解决问题:使用代理方法

     

    添加下面代码:

     

    1. function delegate(fn,params,obj){  
    2.     return function(){  
    3.         fn.call(obj||window,params);  
    4.     }  
    5. }  
    6. 再将 : alink.onclick = function(){alert(i)};

      改为 :

                var pFunc = function(i){alert(i)};
                alink.onclick = delegate(pFunc,i,alink);

      即可。

原创文章,作者:Maggie-Hunter,如若转载,请注明出处:https://blog.ytso.com/tech/pnotes/8724.html

(0)
上一篇 2021年7月18日 22:19
下一篇 2021年7月18日 22:19

相关推荐

发表回复

登录后才能评论