@dev400

Как так сделать на чистом js?

В jquery мы по клику на элемент с каким либо классом можем получить его свойства и атрибуты через this

например так
<ul>
        <li><a href="#" class="link">Ссылка1</a></li>
        <li><a href="#" class="link">Ссылка2</a></li>
        <li><a href="#" class="link">Ссылка3</a></li>
        <li><a href="#" class="link">Ссылка4</a></li>
        <li><a href="#" class="link">Ссылка5</a></li>
    </ul>


$('.link').click(function(){

    alert($(this).text());

});


А в чистом js мы получаем массив
var links = document.getElementsByClassName('link');

У которого соответственно нет метода addEventListener().
И как быть? В цикле бегать по массиву?
for(var i = 0; i < links.length; i++) {
        links[i].addEventListener('click', function() {
            alert(this.text);
        });
    }

Не гуд так делать, я думаю
  • Вопрос задан
  • 310 просмотров
Решения вопроса 3
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Так jQuery именно это и делает, только элегантнее, через forEach.
Ответ написан
Комментировать
Есть ещё вариант:

var parent = document; // или document.getElementByTagName('ul');
parent.addEventListener('click', function(e) {
	if (e.target.tagName === 'LI') { // или тот который вам нужен
		// тут чо-нибудь делаем
	}
});
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы