removeChild() working only for first child in list rendered with insertAdjacentHTML

German

I have the following function for iterating through an array of activities and displaying them. The function also includes a trash-icon that is meant to clear away any specific item that is selected by clicking:

const renderList = (activities) => {
  const display = document.getElementById('task-list-display');
  activities.forEach((activity) => {
    display.insertAdjacentHTML('beforeend', ` 
    <li id="task-item" class="task-item">
      <div class="chk-descr">
        <input 
          data-a1="${activity.index}"
          type="checkbox"
          name="completed"
          class="completed"
          />
        <p data-b1="${activity.index}" class="description" contenteditable="true">${activity.description}</p>
      </div>
        <i class="clear-item fa fa-trash"/></i>
    </li> 
    `);
    const listItem = document.querySelectorAll('.task-item')[0];
    const clearItem = document.querySelectorAll('.clear-item')[0];
    clearItem.addEventListener('click', () => {
      display.removeChild(listItem);
    });
  });
};

The display is working perfectly. However, I am having no success in clearing the items. No success, that is, unless the item selected is the one at the very top of the list. In that case, the item is removed from display, but I obtain the following error:

Failed to execute 'removeChild' on 'Node': The node to be removed is not a child of this node.

When clicking on the items below that one, there is no response at all.

I understand that this has to do with using insertAdjacentHTML to insert the items into display but I do not know what I can use in its stead. remove(listItem) also does not work.

Thanks in advance to anyone that can enlighten me in regards to this matter.

imvain2

Instead of adding the click handler every time you add the item, you can delegate it to the document.body just once. Then look for the class on the item clicked, and if it matches your delete button remove that button's parent node.

const renderList = (activities) => {
  const display = document.getElementById('task-list-display');
  activities.forEach((activity) => {
    display.insertAdjacentHTML('beforeend', ` 
    <li id="task-item" class="task-item">
      <div class="chk-descr">
        <input 
          data-a1="${activity.index}"
          type="checkbox"
          name="completed"
          class="completed"
          />
        <p data-b1="${activity.index}" class="description" contenteditable="true">${activity.description}</p>
      </div>
        <i class="clear-item fa fa-trash"/>DELETE</i>
    </li> 
    `);
  });
};

renderList([
  {"index": "0","description" : "test","title" :"tests" },
  {"index": "30","description" : "xtest","title" :"testsX" }
]);

document.body.addEventListener("click",(e) => {
  let el = e.target;
  if(el.classList.contains("clear-item")){
    el.parentNode.remove();
  }
});
<div id='task-list-display'></div>

Collected from the Internet

Please contact [email protected] to delete if infringement.

edited at
0

Comments

0 comments
Login to comment

Related

UWP ListView within a NavigationView, only first child rendered

removeChild() not working

removeChild not working

.removeChild() not working

RemoveChild removes the first child with this name, but skips the next one with the same name

insertAdjacentHTML not working with created element

insertAdjacentHTML is not working with documentfragment

Why the removeChild() is not working while deleting a list item [Js DOM]?

Target only the first direct child not working despite :nth-child(1)

Only the first page of react-route is rendered

CSS: Target ONLY first child-element in parent - first-of-type not working

Only last list item gets rendered in React

Javascript .removeChild not working as expected

removeChild not working in chrome extension

First child selection on DIV is not working

:first-child selector not working?

CSS first-child not working

first-child selector not working

First Child Last Child Dom traversal not working

:First-Child and :nth-child() not working

:not(:first-child) and :not(:first-of-type) not working

A <Route> is only ever to be used as the child of <Routes> element, never rendered directly

The concept of first child under parent setting margin based on first child rendered in the browser

Object becomes read-only after the component rendered first time

Getting a list of items not only last list item gets rendered - React

Child combinator not working on unordered list

Enumerated list of child class not working

Only first media query working

removeChild Function Not Working with setTimeout function

TOP Ranking

  1. 1

    Failed to listen on localhost:8000 (reason: Cannot assign requested address)

  2. 2

    Loopback Error: connect ECONNREFUSED 127.0.0.1:3306 (MAMP)

  3. 3

    How to import an asset in swift using Bundle.main.path() in a react-native native module

  4. 4

    pump.io port in URL

  5. 5

    Compiler error CS0246 (type or namespace not found) on using Ninject in ASP.NET vNext

  6. 6

    BigQuery - concatenate ignoring NULL

  7. 7

    ngClass error (Can't bind ngClass since it isn't a known property of div) in Angular 11.0.3

  8. 8

    ggplotly no applicable method for 'plotly_build' applied to an object of class "NULL" if statements

  9. 9

    Spring Boot JPA PostgreSQL Web App - Internal Authentication Error

  10. 10

    How to remove the extra space from right in a webview?

  11. 11

    java.lang.NullPointerException: Cannot read the array length because "<local3>" is null

  12. 12

    Jquery different data trapped from direct mousedown event and simulation via $(this).trigger('mousedown');

  13. 13

    flutter: dropdown item programmatically unselect problem

  14. 14

    How to use merge windows unallocated space into Ubuntu using GParted?

  15. 15

    Change dd-mm-yyyy date format of dataframe date column to yyyy-mm-dd

  16. 16

    Nuget add packages gives access denied errors

  17. 17

    Svchost high CPU from Microsoft.BingWeather app errors

  18. 18

    Can't pre-populate phone number and message body in SMS link on iPhones when SMS app is not running in the background

  19. 19

    12.04.3--- Dconf Editor won't show com>canonical>unity option

  20. 20

    Any way to remove trailing whitespace *FOR EDITED* lines in Eclipse [for Java]?

  21. 21

    maven-jaxb2-plugin cannot generate classes due to two declarations cause a collision in ObjectFactory class

HotTag

Archive