簡體   English   中英

如何刪除特定的 ul 的 li?

[英]How can i remove an especific ul's li?

我正在嘗試制作某種待辦事項清單。 當我單擊保存按鈕時,它會使用輸入值創建一個新的 li,並使用刪除按鈕創建另一個 ul 的 li。 我現在想要的是單擊刪除按鈕並刪除該 li。 出於某種原因,只有第一個按鈕將其刪除,並且從第一個到最后一個刪除每個 li。

這是html:

<input type="text" id="itemname">
<button id="save">Salvar</button>
<main id="lists">
    <ul id="itemlist"></ul> 
    <ul id="listbutton"></ul>
</main>

這是js:

let list = document.getElementById("itemlist")
let buttonList = document.getElementById("listbutton")
let listItem = document.getElementById("itemname")
let button = document.getElementById("save")

button.onclick = saveItem

function removeitem(){
    let newli = document.querySelector("#itemlist li")
    list.removeChild(newli)
}

function saveItem(){
list.innerHTML += '<li>'+listItem.value+'</li>'
buttonList.innerHTML += '<li id="newitem"><button id="removebutton">Remover</button></li>'


let delBtn = document.querySelector("#listbutton button")

delBtn.onclick = removeitem

}

您可能希望在事件偵聽器中使用Event.target

function removeitem(event){
    let newli = event.target.closest('li');
    list.removeChild(newli);
}

編輯:此外,您僅將事件偵聽器附加到一個元素,因為querySelector僅返回第一個匹配項。 要將事件偵聽器附加到所有元素,您需要迭代:

let delBtns = document.querySelectorAll("#listbutton button");
[...delBtns].forEach(el=> el.onclick = removeitem);

或者,您需要將單個事件偵聽器附加到更高的元素,這將利用事件冒泡:

let parentElement = document.querySelector("#listbutton")
parentElement.onclick = removeitem;

這是使用Element.closest作為最強大/最穩定的解決方案,但在您的示例中,由於按鈕是li標簽的直接子級,您也可以采用更簡單的方法並使用event.target.parentElement 但是,如果您將來更改 DOM 結構,這可能會中斷。

試試這個,我做了一些小調整,讓它更平滑一點。

 // Create a "close" button and append it to each list item var myNodelist = document.getElementsByTagName("LI"); var i; for (i = 0; i < myNodelist.length; i++) { var span = document.createElement("SPAN"); var txt = document.createTextNode("\×"); span.className = "close"; span.appendChild(txt); myNodelist[i].appendChild(span); } // Click on a close button to hide the current list item var close = document.getElementsByClassName("close"); var i; for (i = 0; i < close.length; i++) { close[i].onclick = function () { var div = this.parentElement; div.style.display = "none"; } } // Add a "checked" symbol when clicking on a list item var list = document.querySelector('ul'); list.addEventListener('click', function (ev) { if (ev.target.tagName === 'LI') { ev.target.classList.toggle('checked'); } }, false); // Create a new list item when clicking on the "Add" button function newElement() { var li = document.createElement("li"); var inputValue = document.getElementById("myInput").value; var t = document.createTextNode(inputValue); li.appendChild(t); if (inputValue === '') { alert("You must write something!"); } else { document.getElementById("myUL").appendChild(li); } document.getElementById("myInput").value = ""; var span = document.createElement("SPAN"); var txt = document.createTextNode("\×"); // x for remove item span.className = "close"; span.appendChild(txt); li.appendChild(span); for (i = 0; i < close.length; i++) { close[i].onclick = function () { var div = this.parentElement; div.style.display = "none"; } } }
 <input type="text" id="myInput" placeholder="Title..."> <button onclick="newElement()" class="addBtn">Salvar</button> <main id="lists"> <ul id="myUL"></ul> </main>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM