我在使用 parentNode.removeChild()
时遇到一些困难。我有一个无序列表中的“项目”列表,每个项目都有自己的删除按钮。我正在尝试将点击事件绑定到每个单独的按钮,这将删除它各自的父“项目”。
到目前为止我的代码:
<ul class="list">
<h2>This is a list</h2>
<li class="item">
<h3>Some Item</h3>
<button class="delete">Delete</div>
</li>
<li class="item">
<h3>Some Item</h3>
<button class="delete">Delete</div>
</li>
<li class="item">
<h3>Some Item</h3>
<button class="delete">Delete</div>
</li>
</ul>
var childElements = document.getElementsByClassName('item');
var buttonElement = document.getElementsByClassName('delete');
function deleteItem(buttonsClass, childClass) {
for (var i=0;i<buttonsClass.length;i++) {
var child = childClass[i];
buttonsClass[i].addEventListener('click', function(child) {
childClass[i].parentNode.removeChild(childClass[i]);
}, false);
}
}
deleteItem(buttonElement, childElements);
我知道有一种更简单的方法可以用 jQuery 来做到这一点,但我真的想用普通的 javascript 来解决这个问题。感谢您提供的所有帮助。
原文由 Frederick M. Rogers 发布,翻译遵循 CC BY-SA 4.0 许可协议
这是 事件委托 的完美案例。根本不需要 jQuery:
无论您有多少个删除按钮,您对整个页面都有一个点击处理程序。这也适用于列表项或表格行,通过在按钮上指定
data-confirm
属性,它会在删除之前弹出一个确认框。您也可以轻松更改它,以便它使用另一个属性来查找删除按钮:
只需将 handleClick 函数中的
if
语句的条件更改为:这将您的行为与样式分离。您可以使用
delete
样式类名称,以及 JavaScript 行为的data-delete
属性。如果您出于任何原因需要更改 CSS 删除类的名称,或者使用不同的类,因为您决定使用像 Bootstrap 这样的第三方 CSS 框架,那么您不需要更改一行 JavaScript。这里的最后一个优点是点击处理程序附加到
document.documentElement
对象,它在 JavaScript 开始执行时可用,代表<html>
元素。不需要 jQuery 的文档就绪事件处理程序。只需附加点击处理程序并在页面上的任何位置导入脚本。