为了账号安全,请及时绑定邮箱和手机立即绑定

为甚用this不能用tr[i],我的理解是this和tr[i]是同一个对象

// 鼠标移动改变背景,可以通过给每行绑定鼠标移上事件和鼠标移除事件来改变所在行背景色。
        var tr = document.getElementById("table").getElementsByTagName('tr');
       
		for(var i=0; i<tr.length; i++)
        { 
            tr[i].onmouseover = function(){
            //   tr[i].style.backgroundColor = "red";
              this.style.backgroundColor = "red";  
            }
            tr[i].onmouseout = function(){
               tr[i].style.backgroundColor="white";
            //   this.style.backgroundColor="white";
            }
        }
	 
	 }


正在回答

3 回答

tr[i].onmouseover = function(){

            //   tr[i].style.backgroundColor = "red";

              this.style.backgroundColor = "red";  

            }

这里面是一个函数的调用, 在函数里面tr[i]是没有被定义的,this是可以获取标签内的对象的

懂了没

0 回复 有任何疑惑可以回复我~
#1

qq_加菲喵_0 提问者

懂了 十分感谢
2016-07-18 回复 有任何疑惑可以回复我~

放在网页中编译一下可以发现,tr[i]没有被定义或者未被赋值。而this指的是table的tr子元素。所以二者不是同一个对象。

0 回复 有任何疑惑可以回复我~
#1

qq_加菲喵_0 提问者

你是说布局里有三个tr 但是不能用tr[i]标识对象?
2016-07-04 回复 有任何疑惑可以回复我~
#2

qq_加菲喵_0 提问者

不对的呀 var tr = document.getElementById("table").getElementsByTagName('tr'); document.write(tr[0]); 有输出值呀 [object HTMLTableRowElement]
2016-07-04 回复 有任何疑惑可以回复我~
#3

qq_加菲喵_0 提问者

又试了下 tr[i].style.backgroundColor = "red"; 放到第六行 tr[i].onmouseover = function(){ 上边就可以变红就是写到方法体中就无效了
2016-07-04 回复 有任何疑惑可以回复我~
#4

GiveMeGeek 回复 qq_加菲喵_0 提问者

不好意思,前面没有说全。准确的说应该是,因为在for循环中,这个i的值等于tr.length。也就是这个i已经是循环完的值了。tr[tr.length]这个对象,自然是没有定义的。
2016-07-04 回复 有任何疑惑可以回复我~
#5

qq_加菲喵_0 提问者 回复 GiveMeGeek

我测试了 确实是不论我在哪一行, onmouseove中i的值都是tr.length。 我其他语言中用到的for循环应该是 每轮循环i的值都是+1。 那么当我鼠标滑过第1行 就是tr[0].onmouseover 当我鼠标滑过第2行 就是tr[1].onmouseover 才对呀 求解释
2016-07-11 回复 有任何疑惑可以回复我~
#6

GiveMeGeek 回复 qq_加菲喵_0 提问者

循环中没有给断点,自己会自动循环完,你在事后再去调用这个里面的方法,这个i的值肯定不会是1,2,3了呀。因为此时,i已经循环完了,是i.length这个值了。
2016-07-17 回复 有任何疑惑可以回复我~
查看3条回复

七八 和十一、十二行的代码

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

为甚用this不能用tr[i],我的理解是this和tr[i]是同一个对象

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信