英文:
How to delete specific parts of a dynamic created list in JavaScript?
问题
Sure, here's the translated text:
嘿,
我目前正在制作一个相当简单的购物清单,以熟悉JavaScript。
如您在图片中所见,我想在单击垃圾桶时删除其旁边的元素。
但这并不像人们想象的那样完全起作用,无论单击哪个垃圾桶,它只会删除列表中的顶部项目。
我的创建元素的函数:
function addFun(){
// * 列表项
const li = document.createElement('li');
li.setAttribute('class', 'list_element');
li.textContent = input.value;
liste.appendChild(li);
if(input.value !== ''){
// * 复选框
const checkbox = document.createElement('input');
checkbox.setAttribute('type', 'checkbox');
li.insertBefore(checkbox, li.childNodes[0]);
input.value = '';
// * 垃圾桶
const trash = document.createElement('img');
trash.setAttribute('src', 'https://cdn-icons-png.flaticon.com/512/3209/3209887.png');
trash.setAttribute('class', 'image');
li.appendChild(trash);
}
}
我的用于删除元素的事件监听器:
document.addEventListener('click', function(e){
if(e.target.classList.contains('image')){
deleteIt();
}
});
function deleteIt(){
const li = document.querySelector('.list_element');
li.remove();
}
我花了很长时间才使事件处理程序起作用,因为我以前从未听说过事件冒泡。
我尝试使用“this”来找到解决方案,但在上下文中我不太确定它的含义。
如果有人能仔细查看并为我提供解决方案或提示,我将不胜感激。
英文:
Hey you,
I'm currently working on a fairly simple shopping list to familiarize myself with javascript.
As you can see in the picture, I want to delete the element next to it when I click on the trashcan.
But this doesn't quite work as one would imagine and only deletes the top item from my list no matter which trashcan i click on.
My function to create the elements
function addFun(){
// * List
const li = document.createElement('li');
li.setAttribute('class', 'list_element');
li.textContent = input.value;
liste.appendChild(li);
if(input.value !== ''){
// * Checkbox
const checkbox = document.createElement('input');
checkbox.setAttribute('type', 'checkbox');
li.insertBefore(checkbox, li.childNodes[0]);
input.value = '';
// * trashcan
const trash = document.createElement('img');
trash.setAttribute('src', 'https://cdn-icons-png.flaticon.com/512/3209/3209887.png');
trash.setAttribute('class', 'image');
li.appendChild(trash);
}
}
My Eventlistener to remove the elements
document.addEventListener('click', function(e){
if(e.target.classList.contains('image')){
deleteIt();
}
});
function deleteIt(){
const li = document.querySelector('.list_element');
li.remove();
}
It took me a long time to get the event handler working as I had never heard of event bubbling before.
I tried a bit with "this" to find a solution, but I wasn't quite sure what it meant in the context
I would be very happy if someone could look over it and maybe give me a solution or a tip
答案1
得分: 0
你可以通过 e.target 确定被点击的按钮。从按钮中,你可以使用 closest 找到要删除的 LI。
document.addEventListener('click', function(e){
if(e.target.classList.contains('image')){
deleteIt(e.target);
}
});
function deleteIt(whichButton){
const li = whichButton.closest("li");
li.remove();
}
英文:
You can determine the button that was clicked by e.target. From the button you can locate the LI to delete using closest
document.addEventListener('click', function(e){
if(e.target.classList.contains('image')){
deleteIt(e.target);
}
});
function deleteIt(whichButton){
const li = whichButton.closest("li");
li.remove();
}
答案2
得分: 0
Your deleteIt() function is not getting the li that should be deleted.
你的 deleteIt() 函数没有获取到应该被删除的 li 元素。
You should pass the target button that is clicked to the deleteIt().
你应该将被点击的目标按钮传递给 deleteIt() 函数。
In this way;
这样做:
function deleteIt(target){
函数 deleteIt(target){
const li = target.closest("li");
li.remove();
}
This way the deleteIt() knows which element to delete precisely.
这样 deleteIt() 函数就知道要精确删除哪个元素了。
I am also new to programming. Sorry if it doesn't help.
我也是编程新手。如果这没有帮助的话,很抱歉。
英文:
Your deleteIt() function is not getting the li that should be deleted.
You should pass the target button that is clicked to the deleteIt().
In this way;
document.addEventListener('click', function(e){
if(e.target.classList.contains('image')){
deleteIt(e.target);
}
});
function deleteIt(target){
const li = target.closest("li");
li.remove();
}
This way the deleteIt() know which element to delete pricesely.
I am also new to programming. Sorry if it doesn't help.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。


评论