удаление DOM-элемента
Здравствуйте!
Засела над какой-то глупой ошибкой. Есть код: function close(el) { el.parentElement.remove(); } let a = document.querySelectorAll('.pic'); const arr = Array.prototype.slice.call(a); arr.forEach(e => { e.addEventListener('click', close(e)); }); Нужно, чтобы при нажатии на картинку с классом pic, удалялся ее родитель. (таких одинаковых картинок много, а нужно удалить именно того родителя, где был клик на картинку внутри него). Если вставить в рабочий код, ничего не происходит. Если же дополнительно прописать этот же код в консоли (с изменением переменных), при запуске кода удаляются даже без клика полностью все родители с картинками. |
cookitee,
строка 5 элементов нет на странице. строка 8 в клик ничего не назначается, так как строка 3 ничего не возвращает. скрипт ставить вниз или читать про событие DOMContentLoaded строка 8 читать про bind или обернуть close(e) в функцию |
cookitee,
самое быстрое ставить клик на document, и не надо никаких циклов, читать про делегирование. |
Вот если прописать так, все работает, удаляет только один нужный элемент. Но опять же, только если в консоли в браузере его прописывать и запускать. Так если просматривать просто результат написанного кода, не работает.
function close(el) { el.parentElement.remove(); } let a = document.querySelectorAll('.pic'); const arr = Array.prototype.slice.call(a); arr.forEach(e => { e.addEventListener("click", function () {close(this)}); }); |
cookitee,
document.addEventListener("DOMContentLoaded", function() { function close(el) { el.parentElement.remove(); } let a = document.querySelectorAll('.pic'); const arr = Array.prototype.slice.call(a); arr.forEach(e => { e.addEventListener('click', close.bind(null, e)); }); }); |
cookitee,
или так document.addEventListener( "click" , ({target}) => (target = target.closest(".pic")) && target.parentElement.remove()); |
вообще перестало работать, даже через консоль
|
вот так работает! спасибо огромное!!! А можете пожалуйста вкратце объяснить?
|
Цитата:
|
Цитата:
|
Часовой пояс GMT +3, время: 21:49. |