问答详情
源自:5-1 编程挑战

为什么只能用this呢。个人的见解。不知道对不对

在取出元素a的innerHTML后,想赋值给cite。只能用this.innerHTML? 为什么不能用as[i].innerHTML   估计是因为[]可以表示一个元素的属性?

可以运行的代码:

var title=box.getElementsByTagName('cite')[0],

      as=box.getElementsByTagName('a');

      for(var i=0;i<as.length;i++){

      as[i].onclick=function(){

      title.innerHTML=this.innerHTML;

      }

把上面的this换成as[i]就没法运行。

提问者:Jesse1990 2015-07-05 12:49

个回答

  • domico
    2015-07-21 17:40:58
    已采纳

    因为代码执行到onclick的回调方法里的时候,i早就已经++最大值了,超出索引范围了。按你想法改了之后,每次点击a,执行的i总是a的长度。所以你要么是用你的this,还可以用(function(i){

    //code here 

    })(i))这样把i传递进来。

  • domico
    2015-07-05 12:54:04

    as[i].onclick=function(){

          title.innerHTML=this.innerHTML; //改成as[i]这样记录是得到的i最大的值。

          }

    可以改成这样:

    (function(item){
    title.innerHTML=item.innerHTML;
    }(as[i]))