3 回答
TA贡献1852条经验 获得超7个赞
因为您希望在多个按钮上添加相同的逻辑,所以应该使用 而不是 。该 ID 应该是唯一的。使用 Element.closest(),您可以找到最接近单击发生的父节点,直到找到与提供的选择器字符串匹配的节点。在此处阅读代码示例中的注释classes
ids
// deleteButtons is will be an array of buttons
const deleteButtons = document.querySelectorAll('.del');
deleteButtons.forEach( button => {
// add the event listener to each button
button.addEventListener('click', removeMe);
});
function removeMe() {
// this is the button
// from the button you want to move up in DOM
// and find the closes <li> to remove
this.closest('li').remove();
}
<h1>The List</h1>
<ul>
<li>Delete me<button class="del">x</button></li>
<li>Delete me too<button class="del">x</button></li>
</ul>
TA贡献1853条经验 获得超9个赞
正如其他人所说,元素 ID 在文档中应该是唯一的。
使用事件委派并使用数据属性来识别应激活删除的按钮。
document.addEventListener('click', evt => {
const origin = evt.target;
if (+origin.dataset.deleteparent) {
origin.closest("li").remove();
}
});
/*
--explained--
const origin = evt.target;
^ where did the click originated?
if (+origin.dataset.deleteparent)
^ ^ only if the button contains data-deleteparent attribute
^ convert data-attribute value to Number.
If it's not there, or 0, nothing will happen
origin.closest("li").remove();
^ parent li ^
^ remove it
}
*/
button[data-deleteparent] { color: red; border: none; background-color: transparent; cursor: pointer}
<h1>The List</h1>
<ul>
<li>Delete me <button data-deleteparent="1">✘</button></li>
<li>Delete me too <button data-deleteparent="1">✘</button></li>
<li>Delete me not <button>Do not delete</button></li>
</ul>
TA贡献1786条经验 获得超13个赞
只需使用 DOM 节点的属性。 另外,如上所述 - 在你的情况下,你应该使用 es 而不是 id,因为必须是唯一的。parentElementclassid
const buttons = document.querySelectorAll('.rm-button');
function rmParent() {
this.parentElement.remove();
}
buttons.forEach(button => {
button.addEventListener('click', rmParent);
});
<h1>The List</h1>
<ul>
<li>Delete me<button class="rm-button">x</button></li>
<li>Delete me too<button class="rm-button">x</button></li>
</ul>
添加回答
举报