簡體   English   中英

如果所有項目都具有相同的 Id,如何使用 click 事件刪除被點擊的項目

[英]How can delete the clicked item using the click event if all items have the same Id

我正在嘗試僅刪除選定的列表項,但僅當在代碼中手動添加該項並使用 javascript 進行注釋時才有效,但我想使用代碼在列表中添加和刪除元素,請幫忙,謝謝。 我希望能夠將元素添加到 ul 元素並在單擊右上角的 x 時將其刪除。

 <div class="todocontent">
        <ul id="todolist" class="todolist">
            <li id="todoitem" class="todoitem">
                    <div class="todotextheader">
                        <div class="todotxthd"><h3>To do note Header</h3></div>
                        <div class="delete"><i id="deletex" class="far fa-window-close deletex" ></i> 
                        </div>
                    </div>
                    <div class="todotext">
                        <p>this is the main text of the todo note</p>
                    </div>
            </li>
        </ul>
    </div>





 <div class="addcontainer">
        <div class="addtextheader">
            <input type="text" id="addtxtheader" style="width: 565px; height: 25px;" maxlength="50">
        </div>
        <div class="addtext">
            <textarea name="addtxt" id="addtxt" cols="79" rows="7"></textarea>
        </div>
        <div class="addbtn">
            <button id="add">+</button>
        </div>
    </div>

我的js:

document.getElementById('add').addEventListener('click', function(){

//get the text and the text header from the fields
var addtxtheader = document.getElementById('addtxtheader').value;
var addtxt = document.getElementById('addtxt').value;

// get the list 
var list = document.getElementById('todolist');


//create elements

var listitem = document.createElement('li')
var todotxtheader = document.createElement('div');
var todotxthd = document.createElement('div');
var deleteitem = document.createElement('div');
var deletex = document.createElement('i');


var todohtxt = document.createElement('h3');
var todotext = document.createElement('div');
var todotxt = document.createElement('p');

//add classes to their respected elements
listitem.classList.add('todoitem');
todotxtheader.classList.add('todotextheader');
todotxthd.classList.add('todotxthd');
deleteitem.classList.add('delete');
todotext.classList.add('todotext');

//append elements
list.insertBefore(listitem, list.childNodes[0])
listitem.appendChild(todotxtheader);
todotxtheader.appendChild(todotxthd);
todotxthd.appendChild(todohtxt);
todotxtheader.appendChild(deleteitem);
deleteitem.appendChild(deletex);
deletex.innerHTML = '<i id="deletex" class="far fa-window-close deletex" >'
listitem.appendChild(todotext);
todotext.appendChild(todotxt)

//assign the input value
todohtxt.innerHTML = addtxtheader;
todotxt.innerHTML = addtxt;

})

document.getElementById('deletex').addEventListener('click', function(){
    var item = this.parentNode.parentNode.parentNode;
    var parent = item.parentNode;
    parent.removeChild(item);


})

我的代碼: https : //jsfiddle.net/c2rkm7tx/

你需要遍歷所有元素並添加一個事件偵聽器。 在新元素上運行 addListener 函數以在新元素上添加事件偵聽器.. 你可以看到我的例子

 document.getElementById('add').addEventListener('click', function(){ document.getElementById('todolist').innerHTML += '<li id="todoitem" class="todoitem">'+ '<div class="todotextheader">'+ '<div class="todotxthd">'+ '<h3>'+ document.getElementById('addtxtheader').value+ '</h3>'+ document.getElementById('addtxt').value + '</div>'+ '<div class="delete"><i id="deletex" class="far fa-window-close deletex" ></i></div>'+ '</div>'+ '<div class="todotext">'+ '<p>this is the main text of the todo note</p>'+ '</div></li>'; addListener() }) function addListener(){ var elements = document.getElementsByClassName('delete'); for(var element in elements){ elements[element].addEventListener('click', function(e){ e.target.parentNode.parentNode.parentNode.remove(); }) } } addListener();
 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>ToDo</title> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.11.2/css/fontawesome.css"> <script src='https://kit.fontawesome.com/a076d05399.js'></script> <link rel="stylesheet" href="todo.css"> </head> <body> <div class="addcontainer"> <div class="addtextheader"> <input type="text" id="addtxtheader" style="width: 565px; height: 25px;" maxlength="50"> </div> <div class="addtext"> <textarea name="addtxt" id="addtxt" cols="79" rows="7"></textarea> </div> <div class="addbtn"> <button id="add">+</button> </div> </div> <div class="todocontainer"> <div class="todoheader"> <h1>TO DO DONE</h1> </div> <div class="todocontent"> <ul id="todolist" class="todolist"> <li id="todoitem" class="todoitem"> <div class="todotextheader"> <div class="todotxthd"><h3>To do note Header</h3></div> <div class="delete"><i id="deletex" class="far fa-window-close deletex" ></i></div> </div> <div class="todotext"> <p>this is the main text of the todo note</p> </div> </li> </ul> </div> <div class="addcontainer"> <div class="addtextheader"> <input type="text" id="addtxtheader" style="width: 565px; height: 25px;" maxlength="50"> </div> <div class="addtext"> <textarea name="addtxt" id="addtxt" cols="79" rows="7"></textarea> </div> <div class="addbtn"> <button id="add">+</button> </div> </div> </div> <script src="todo.js"></script> </body> </html>

這是您問題的簡單解決方案! 對不起,如果我沒有理解你的意思..

 document.getElementById('add').addEventListener('click', function(){ //get the text and the text header from the fields var addtxtheader = document.getElementById('addtxtheader').value; var addtxt = document.getElementById('addtxt').value; // get the list var list = document.getElementById('todolist'); //create elements var listitem = document.createElement('li') var todotxtheader = document.createElement('div'); var todotxthd = document.createElement('div'); var deleteitem = document.createElement('div'); var deletex = document.createElement('i'); var todohtxt = document.createElement('h3'); var todotext = document.createElement('div'); var todotxt = document.createElement('p'); //add classes to their respected elements listitem.classList.add('todoitem'); todotxtheader.classList.add('todotextheader'); todotxthd.classList.add('todotxthd'); deleteitem.classList.add('delete'); todotext.classList.add('todotext'); //append elements list.insertBefore(listitem, list.childNodes[0]) listitem.appendChild(todotxtheader); todotxtheader.appendChild(todotxthd); todotxthd.appendChild(todohtxt); todotxtheader.appendChild(deleteitem); deleteitem.appendChild(deletex); deletex.innerHTML = '<i id="deletex" class="far fa-window-close deletex" >' listitem.appendChild(todotext); todotext.appendChild(todotxt) //assign the input value todohtxt.innerHTML = addtxtheader; todotxt.innerHTML = addtxt; }) document.addEventListener('click', function(e){ e=(e||window.event); e.preventDefault(); const path=e.path; path.forEach(elem=>{ if(elem!=window&&elem!=document&&elem!=document.documentElement) { if(elem.id=="deletex"){ var item = elem.parentNode.parentNode.parentNode; var parent = item.parentNode; parent.removeChild(item); } } }); })
 <div class="todocontent"> <ul id="todolist" class="todolist"> <li id="todoitem" class="todoitem"> <div class="todotextheader"> <div class="todotxthd"><h3>To do note Header</h3></div> <div class="delete"><i id="deletex" class="far fa-window-close deletex" >X</i> </div> </div> <div class="todotext"> <p>this is the main text of the todo note</p> </div> </li> </ul> </div> <div class="addcontainer"> <div class="addtextheader"> <input type="text" id="addtxtheader" style="width: 565px; height: 25px;" maxlength="50"> </div> <div class="addtext"> <textarea name="addtxt" id="addtxt" cols="79" rows="7"></textarea> </div> <div class="addbtn"> <button id="add">+</button> </div> </div>

您的解決方案應該已經工作得更簡潔一些:

document.getElementById('todoitem').addEventListener('click', function(event){
        if(event.originalTarget.id == "deletex"){
            this.parentElement.removeChild(this);
        }
})

它的作用是將事件處理程序綁定到它自己的 ToDo 項。 正弦 DOM 事件會冒泡,當有人點擊列表項時,它會被觸發,它會檢查該點擊是否在 deletex 項上,如果是,它將自行刪除。

創建對象時,將此事件偵聽器綁定到對象上。

//create elements

var listitem = document.createElement('li')
listitem.addEventListener('click', function(event){
        if(event.originalTarget.id == "deletex"){
            this.parentElement.removeChild(this);
        }
})
var todotxtheader = document.createElement('div');
var todotxthd = document.createElement('div');

暫無
暫無

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

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