javascript - JavaScript - 如何在使用 InsertBefore() 重新排序后检索类元素的新索引
问题描述
注意:我不知道 JQuery,只知道 Vanilla JavaScript。
晚上好,
使用 insertBefore() 函数对类元素重新排序后,我无法检索类元素的更新索引。
示例:重新排列时索引为 0、1、2 的元素 A、B、C:C、A、B 将具有索引 2、0、1 而不是 0、1、2。
这是我用于测试的代码。您可以单击单个元素,按钮重新排序会将最后一个元素移到第一个之前,并且可以在控制台日志中查看索引结果:
let container = document.getElementById('container');
let items = document.querySelectorAll('.items');
items.forEach((row, index) => {
row.addEventListener('click', () => {
console.log(index);
});
});
let reorder = document.getElementById('reorder').addEventListener('click', () => {
container.insertBefore(container.children[4], container.children[0]);
});
#container {
border: 2px solid black;
display: inline-block;
position: relative;
}
.items {
border: 2px solid red;
margin: 2px;
width: 20px;
}
<div id="container">
<div class="items">0</div>
<div class="items">1</div>
<div class="items">2</div>
<div class="items">3</div>
<div class="items">4</div>
</div>
<button id="reorder">ReOrder</button>
解决方案
您当前的解决方案不能作为在您的循环首次添加事件侦听index
器时最初设置的闭包的一部分。您可以通过使用在子for
项中搜索来找到您单击的元素的索引。您首先需要将孩子转换为数组(这在下面使用扩展语法完成),因为它是一个HTMLCollection,它没有 indexOf 方法:.indexOf()
...
let container = document.getElementById('container');
let items = document.querySelectorAll('.items');
items.forEach((row, index) => {
row.addEventListener('click', (event) => {
console.log([...container.children].indexOf(row));
});
});
let reorder = document.getElementById('reorder').addEventListener('click', () => {
container.insertBefore(container.children[4], container.children[0]);
});
#container {
border: 2px solid black;
display: inline-block;
position: relative;
}
.items {
border: 2px solid red;
margin: 2px;
width: 20px;
}
<div id="container">
<div class="items">0</div>
<div class="items">1</div>
<div class="items">2</div>
<div class="items">3</div>
<div class="items">4</div>
</div>
<button id="reorder">ReOrder</button>
推荐阅读
- javascript - 在javascript中解析json(具有多个值)
- android - 使用 Xamarin.Forms for Android 在 Android 模拟器中显示 MSAL 登录页面时出现问题
- go - 查找按最佳匹配排序的所有元素
- react-native - 尝试导入错误:“MaskedViewIOS”未从“react-native”导出
- python - 即使安装了 CUDAnn v10.1,Tensorflow 也没有在 GPU 上运行
- python - 如何在 python 中将二进制图像的内容/对象居中?
- hyperledger-fabric - 在 Hyperledger Fabric 中更新证书时会发生什么?
- amazon-web-services - 如何在 NodeJs 中发布自定义标头 AWS pinpoint 电子邮件
- c# - 连接到本地网络上的 MariaDB 服务器时出现命名管道提供程序错误
- javascript - 为什么我的循环没有在我的页面上显示我的 JSON/API 数据?