群里有人问怎么生成一个包含调用一系列jquery对象里函数的数组,其实首选方案是数组里直接存对象,不过这个问题值得研究一下.
首先贴上一段简单的html:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
<html> <body> <div id="a1"></div> <div id="a2"></div> <div id="a3"></div> <div id="a4"></div> <div id="a5"></div> <div id="a6"></div> <div id="a7"></div> <script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script> <script> your_codes(); </script> </body> </html> |
其中的 your_codes(); 则是接下来要说的实现代码.
一开始我的写法是这样:
1 2 3 4 5 6 |
var idfn = []; for(var i = 1; i <= 7; i = i + 1){ idfn.push(function(){ return $("#a"+i).attr("id"); }); } |
但最后生成的函数会随着 i 从栈中的消失而失去作用. 也就是说,在匿名函数内的变量 i 不能是循环里那个 i 的引用,否则最后数组里所有元素都和最后一个元素相同了.