Лучшим решением для чего-то подобного было бы использование делегирования события для присоединения одного слушателя к ul
вместо подключения нескольких слушателей к каждому li-untag
:
document.querySelector('ul').addEventListener('click', ({ target }) => {
if (target.matches('.li-untag')) {
target.closest('li').remove();
}
});
Если вы не хотите этого делать и хотите сохранить прослушиватель для каждого элемента li-untag
, вы можете вставить новый HTML-код, затем отсортировать <li>
s и прикрепить прослушиватели к каждому новому li-untag
:
const addListeners = () => {
document.querySelectorAll('.li-untag').forEach((span) => {
span.addEventListener('click', ({ target }) => {
target.closest('ul').remove();
});
});
};
// on document load:
addListeners();
// after inserting new HTML:
const lis = [...document.querySelectorAll('ul li')];
lis.sort((a, b) => a.children[0].textContent.localeCompare(b.children[0].textContent));
const ul = document.querySelector('ul');
lis.forEach((li) => {
ul.appendChild(li);
});
addListeners();