前端攻城狮学习笔记四:点击ul下的li时alert其index值(闭包的应用)
题目要求
这是淘宝前端开发面试JavaScript部分一道题。
下面这个ul,如何点击每一列的时候alert其index?:
<ul id=”test”> <li>这是第一条</li> <li>这是第二条</li> <li>这是第三条</li> </ul>
题目分析
两种方案,一是给每个li加一个自定义属性,然后在点击事件中alert出就行,二是利用闭包。这两种方法各有利弊,前者简单,但增加了自定义属性,改变了页面HTML代码,后者代码简洁但增加了内存消耗。代码如下:
function $(id) { return document.getElementById(id); } //方法一 var lis = $("test").children; for (var i = 0, l = lis.length; i < l; i++) { lis[i].setAttribute("index", i); lis[i].onclick = function() { alert(this.getAttribute("index")); } } //方法二 var lis_lis = $("test").getElementsByTagName("li"); for (var i = 0, l = lis_lis.length; i < l; i++) { lis_lis[i].onclick = (function(x) { return function() { alert(x); } })(i); }
效果验证
- 这是第一条
- 这是第二条
- 这是第三条
小结
题目内容虽少,但考察了闭包等JS基本功,可称得上短小精悍。