JS点击获取到ul下的li的index

面试题,不会,菜。

闭包

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
var ul = document.getElementsByTagName("ul")[0];  
var list = ul.getElementsByTagName("li");

function foo(){
for(var i = 0, len = list.length; i < len; i++){
var that = list[i];
list[i].onclick = (function(k){
var info = that.innerHTML;
return function(){
alert(k + "----" + info);
};
})(i);
}
}

foo();

事件代理

1
2
3
4
5
6
7
8
9
10
11
12
13
var ul = document.querySelector('ul');  
var list = document.querySelectorAll('ul li');

ul.addEventListener('click', function(ev){
var ev = ev || window.event;
var target = ev.target || ev.srcElemnt;

for(var i = 0, len = list.length; i < len; i++){
if(list[i] == target){
alert(i + "----" + target.innerHTML);
}
}
});

JQuery

1
2
3
4
5
6
7
8
9
10
11
12
// delegate方法
$("ul").delegate("li", "click", function(){
var index = $(this).index();
var info = $(this).html();
alert(index + "----" + info);
});
// on方法
$("ul").on("click", "li", function(){
var index = $(this).index();
var info = $(this).html();
alert(index + "----" + info);
});

ES6 let

1
2
3
4
5
6
7
8
9
10
11
var ul = document.getElementsByTagName("ul")[0];  
var list = ul.getElementsByTagName("li");

function foo(){'use strict'
for(let i = 0, len = list.length; i < len; i++){
list[i].onclick = function(){
alert(i + "----" + this.innerHTML);
}
}
}
foo();

参考

https://segmentfault.com/q/1010000008557139