Переделать делегирование событий, чтобы ничего не сломалось
хочу переделать делегирование событий. Сейчас при клике на блок, открывается другая страница в новом окне. А при клике на элементы блока (ссылки, кнопки), отрабатывают кнопки и клик по блоку не происходит.
Есть такая проблема, в блоке в любой момент могут быть добавлены новые элементы со своей логикой и каждый раз в условие conditions добавлять новые исключения не совсем удобно и правильно.
Как можно переделать, чтобы при добавлении новых элементов не пришлось снова лезть в код и добавлять новые условия. Может можно как-то переписать, чтобы получился универсальный метод без постоянного добавления новых условий.
Чистый JS или JQuery, без разницы
const block = document.querySelector('.block');
const change = block.querySelector('.block__change');
change.addEventListener('click', function() {
block.querySelector('.block__text').style.color = '#f3ca63';
});
block.addEventListener("click", function(e) {
var classList = e.target.classList;
var conditions = classList.contains("block__more") ||
classList.contains("block__title") ||
classList.contains("block__button") ||
classList.contains("block__change") ||
classList.contains("block__text-link");
if (!conditions) {
var link = this.querySelector(".block__title");
window.open(link.getAttribute("href") + 'search/sometext');
} else {
e.stopPropagation();
console.log('some magic done');
}
});
.block {
width: 400px;
height: 250px;
padding: 50px;
border: 1px solid #ccc;
cursor: pointer;
}
.block__title {
display: block;
font-size: 30px;
color: #444;
margin-bottom: 30px;
}
.block__text {
margin-bottom: 30px;
}
.block__text-link {
color: red;
}
.block__button {
display: inline-block;
padding: 10px 20px;
border: 1px solid #ccc;
text-decoration: none;
}
.block__change {
margin-left: 30px;
display: inline-block;
padding: 10px 20px;
border: 1px solid #444;
text-decoration: none;
}
<div class="block">
<a href="https://google.com" class="block__title">Title</a>
<p class="block__text">Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean ut metus vitae mi vestibulum finibus. Ut ultrices imperdiet <a class="block__text-link" href="https://yahoo.com">dolor</a>, nec malesuada tortor tincidunt ac. In id venenatis nisi. Nulla
facilisi. Vestibulum diam mauris, sodales at sapien non, porta sollicitudin sem. Proin quis ornare <a class="block__text-link" href="https://mail.ru">leo</a>. Phasellus in porttitor ipsum.
</p>
<a href="https://ya.ru" class="block__button">Button</a>
<a href="http://www.nooooooooooooooo.com/" class="block__change">change text color</a>
</div>