javascript - 删除带有事件的项目
问题描述
当用户单击下拉菜单上方时,我需要删除除从菜单 ID 中选择值之外的所有项目,为此我做了一个事件。
这是我试过的:
const menu = document.querySelector("#menu");
menu.addEventListener("click", () => {
let sonsLength = menu.length;
for (let i = 0; i < sonsLength; i++) {
if (menu[i].value != "Select") {
menu.removeChild(menu[i]);
sonsLength = sonsLength - 1;
}
}
})
<select id="menu">
<option value="Select">Select</option>
<option value="Madrid">Madrid</option>
<option value="Barcelona">Barcelona</option>
<option value="Sevilla">Sevilla</option>
<option value="Bilbao">Bilbao</option>
<option value="Manchester">Manchester</option>
<option value="Paris">Paris</option>
</select>
但是,我的循环并没有按我的预期工作,因为用户需要在下拉菜单上方单击几次才能删除除第一个以外的所有项目,并且由于我的理解,当用户单击一次时应该删除这些项目。
谢谢!
解决方案
我仍然不确定这是否是您想要实现的目标,但也许我是对的?
const menu = document.querySelector("#menu");
menu.addEventListener("change", () => {
let sonsLength = menu.length;
for (let i = 0; i < sonsLength;) {
if (menu[i].value != "Select") {
menu.removeChild(menu[i]);
sonsLength = sonsLength - 1;
}
else
i++;
}
})
<select id="menu">
<option value="Select">Select</option>
<option value="Madrid">Madrid</option>
<option value="Barcelona">Barcelona</option>
<option value="Sevilla">Sevilla</option>
<option value="Bilbao">Bilbao</option>
<option value="Manchester">Manchester</option>
<option value="Paris">Paris</option>
</select>
回答你关于 for 循环中 else 的问题:
如果删除数组中的一项,则所有其他项索引都会向前移动一个位置。例如
你有一个数组
[0, 1, 2]
现在值 0 在索引 0 处,值 1 在索引 1 处,值 2 在索引 2 处。
当你现在删除你得到的第一个元素
[1, 2]
所以现在值 1 在索引 0 处,值 2 在索引 1 处。
对于我的循环,这意味着,如果从数组中删除一个元素,则不能增加索引 (i),因为所有其他元素都移动到实际索引 (i)。只有当我离开一个元素时,我才必须增加索引才能到达下一个元素
推荐阅读
- react-native - React Native:businessPhoneNumber 保存后不持久
- c# - 在 onClick 页面重定向到页面但显示已删除数据之后?
- python - Python将字符串列表拆分为包含原始字符串的列表列表
- java - UIManager,如何获取不同 LookAndFeels 的值?
- python - 使用 Python 循环遍历元组列表
- javascript - 计算输入要素的几何交集并在 esri srcgis 中相应地更新输入要素类中的要素
- docker - 在模拟操作系统时运行命令
- ada - 确定项目构建所需的 Ada 源文件
- python - 从 Numpy 数组中绘制 python matplotlib imshow
- postgresql - 向 PostgreSQL 中的 JSONB 字段添加多个路径项