Из-за поведения js scoping я думаю, что поиск решения для этого в строках вашего шаблона, скорее всего, вызовет у вас больше проблем, чем оно того стоит. Но есть два способа сделать это, которые должны хорошо сочетаться с существующим кодом.
Но сначала исправьте ошибки, из-за которых он не запускается, например, отсутствие "
, а также использование tagName
для закрытия тега html.
Метод 1:
Просто назначьте прослушиватель событий родителю, а не дочернему элементу. Вы можете использовать evt.target
, чтобы проверить, является ли цель ожидаемым тегом, получить его свойства и т. Д. В зависимости от того, как настроен ваш код, это может быть оптимальным решением.
Имейте в виду, что прослушиватель событий должен быть добавлен только один раз.
const parent = document.querySelector('.parent')
const tagName = 'a'
const title = 'Click Me'
const results = {
id: 1234567
}
parent.innerHTML += `<${tagName} title="${title}" id="el-${results.id}" href="${title}">${title} </${tagName}>`;
parent.addEventListener('click', function(evt) {
evt.preventDefault();
console.log(evt.target.title)
// this.removeElements();
// this.createElem("h3", title);
})
<div class="parent" />
Метод 2:
После назначения innerHTML
элемент добавляется в документ и может быть выбран с помощью querySelector
.
Кажется, вы назначаете какой-то идентификатор каждому тегу, поэтому вы можете просто использовать этот идентификатор, чтобы выбрать тег, а затем добавить прослушиватель событий.
Класс будет лучше выбирать одновременно несколько элементов.
const parent = document.querySelector('.parent')
const tagName = 'a'
const title = 'Click Me'
const results = {
id: 1234567
}
parent.innerHTML += `<${tagName} title="${title}" id="el-${results.id}" href="${title}">${title} </${tagName}>`;
parent.querySelector(`#el-${results.id}`)
.addEventListener('click', function(evt) {
evt.preventDefault();
// this.removeElements();
// this.createElem("h3", title);
})
<div class='parent' />