【发布时间】:2021-04-15 14:11:06
【问题描述】:
我的 HTML 文件中有五个按钮。
看到它们是五个,我希望能够打印在 HTML 集合中单击的特定按钮的索引。即点击btn 4 我应该看到3 打印出来。我尝试将一些我认为可以做到但徒劳无功的 javascript 行放在一起。 JS代码为:
if (document.readyState == 'loading') {
document.addEventListener('DOMContentLoaded',execute);
}else{
execute()
}
function execute() {
var btns = document.getElementsByClassName('item');
for (var i = 0; i < btns.length; i++) {
btns[i].addEventListener('click',btnClicked);
}
}
function btnClicked(event,btns) {
var btn = event.currentTarget;
var btnIndex = btns.indexOf(btn)
console.log(btnIndex)
}
<body>
<div class="btn-items">
<button class="item">btn 1 </button>
<button class="item">btn 2 </button>
<button class="item">btn 3</button>
<button class="item">btn 4</button>
<button class="item">btn 5</button>
</div>
</body>
要走的路是什么?
【问题讨论】:
-
去掉
DOMContentLoaded事件周围的绒毛,只附加事件而不做任何检查。不要迭代实时 HTMLCollection,而是使用数组 (btns = Array.from(document.querySelectorAll('.item'));)。这也将解决您与indexOf的问题。 -
查看this answer。即使它是关于
classList它也适用于querySelectorAll的结果
标签: javascript html arrays dom dom-events