Задать вопрос
VadimW
@VadimW
Web Developer

Как идентифицировать каждый блок в jQuery?

Всем привет. Имеется вид комментария такого вида:

244 это id комментария

<div id="comments_244">

<span>
<a href="javascript://" id="edit_244">Редактировать</a>
<span id="panel_244" style="display:none;">
<!-- Панель управления комментарием -->
</span>
</span>

</div>

Имеется jQurey
$('#edit_244').click(function(){
$('#edit_244').toggleClass('edit_hide');
$('#panel_244').toggleClass('panel_look');
})


Этот jQurey находится в каждом блоке комментария. Так вынужден был сделать из-за не знания. Как сделать один скрипт, что бы он мог обрабатывать все комментарии?
  • Вопрос задан
  • 100 просмотров
Подписаться 1 Простой 1 комментарий
Решения вопроса 1
0xD34F
@0xD34F Куратор тега JavaScript
Уберите уникальные id, добавьте общие классы.
Если id нужен, положите его в data-атрибут корневого элемента комментария.
Уберите атрибут style, его содержимое разместите в стилях класса соответствующего элемента.
Вместо переключения двух классов у разных элементов переключайте один - у корневого элемента комментария.

<div class="comment" data-id="187">
  <a class="comment-edit">Редактировать</a>
  <span class="comment-panel"></span>
</div>

.comment .comment-panel {
  display: none;
}

.comment.editing .comment-panel {
  display: inline;
}

.comment.editing .comment-edit {
  color: red;
}

const containerSelector = '.comment';
const buttonSelector = '.comment-edit';
const activeClass = 'editing';


// вот вам ваш jquery
$(containerSelector).on('click', buttonSelector, e => {
  const id = $(e.delegateTarget).toggleClass(activeClass).data('id');
  console.log(id);
});

// или, к чёрту jquery
document
  .querySelectorAll(`${containerSelector} ${buttonSelector}`)
  .forEach(n => n.addEventListener('click', onClick));

function onClick() {
  const container = this.closest(containerSelector);
  container.classList.toggle(activeClass);
  const { id } = container.dataset;
  console.log(id);
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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