大侠,我把代码稍微改了一下,就实现了
但是同样的var变量,为什么lis就可以 lis[i]不可以?
请看代码
function setup() {
var lis = document.querySelectorAll('ul li');
var i=0;
for (i = 0; i < lis.length; i++) {
lis[i].addEventListener('click', function(e) {
if (e.target.nodeName === 'LI') {
parent = e.target.parentNode;
parent.insertBefore(e.target,parent.firstChild);
console.log(this); //这里的this就是lis[i]
console.log(lis); //这里成功打印 lis , lis和i都是function外面的变量,为什么这样可以啊
//console.log(lis[i]);//这样不可以!!
}
});
}
}
【 在 a9udn9u (******) 的大作中提到: 】
: 用var定义的变量是函数范围内有效的,你的事件处理函数被执行时,闭包内的变量i等于lis.length,lis[i]等于undefined。
: 在for循环外把ul赋给一个变量,在事件处理函数里直接ul.insertBefore(e.target, ul.firstChild),应该就可以了。
: 或者更简单一点,把事件处理函数加在ul上。
: ...................
--
修改:Splunk FROM 61.171.205.*
FROM 61.171.205.*