题目要求
这是淘宝前端开发面试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基本功,可称得上短小精悍。