如何使用普通js返回nodelist的索引
How to return the index of a nodelist using vanilla js?
我有一些东西,我想从jquery转换到js。
我使用js创建12 li元素,当点击得到索引号,在jquery中我使用。index()函数来实现这一点,
var month = $(".calenderApp__calender__allMonths__month"),
startMonth;
$(month).on('click', function () {
startMonth = $(this).index() + 1;
});
我该怎么做呢?在普通js中,我已经讲到
了var month = document.querySelectorAll(".calenderApp__calender__allMonths__month"),
startMonth;
for (var i=0; i<month.length; i++) {
month[i].addEventListener("click", function () {
startMonth = this; //returns full html element, just need index number
});
}
将索引存储在元素中。
var month = document.querySelectorAll(".calenderApp__calender__allMonths__month"),
startMonth;
for (var i=0; i<month.length; i++) {
month[i].index = i;
month[i].addEventListener("click", function () {
alert(this.index+1);
});
}
<ul>
<li class="calenderApp__calender__allMonths__month">Jan</li>
<li class="calenderApp__calender__allMonths__month">Feb</li>
<li class="calenderApp__calender__allMonths__month">March</li>
<li class="calenderApp__calender__allMonths__month">Apr</li>
</ul>
这是传统的闭包在循环中的问题。实际上,这个用例是ajax流行之前人们询问的原始用例。因此,您可以使用传统的解决方案:
for (var i=0; i<month.length; i++) {
(function(j){
month[i].addEventListener("click", function () {
startMonth = j; // j is the captured value of i
});
})(i); // capture value of `i` here to break closure
}
至于为什么会发生这种情况,请阅读以下内容:请解释JavaScript闭包在循环中的使用,或者在SO或其他地方关于闭包在循环中的任何一页。
相关文章:
- 名称输入的索引
- 在jQuery中获取表的行索引
- 测试索引值是否等于某个数字的倍数
- 循环遍历数组中的特定索引
- 按照选项卡索引的顺序循环一个jQuery选择
- 在JavaScript中通过索引从对象数组中获取值
- 尝试在PHP中回显输入文本时出现未定义的索引错误
- 在索引.html和应用.js [node.js] 之间共享变量
- 如何为高图中的区域线创建z索引
- 下拉列表在使用z索引放置在前面后停止工作
- 减去两个索引不同但值相同的整数
- 如何通过所选索引(AngularJS)在模态弹出窗口中显示数据
- Javascript:根据对象的嵌套数组中的值,在数组中查找对象的索引
- 用javascript查询lucene索引
- 使用它更新集合中的嵌套数组's索引
- 如何将ng选项的索引作为angularJs中的值传递给模型
- Javascript获取所有锚链接的索引
- 调用具有特定索引值 NodeList 的函数
- 在NodeLIst中检测被点击元素的索引
- 如何使用普通js返回nodelist的索引