Как удалить и потом снова присвоить класс конкретному элементу списка?

Добрый день. Есть список из нескольких элементов. Одному элементу присвоен дополнительный класс "current". Если кликнуть на другой элемент, то у одного класс "current" удаляется, а тому, по которому кликнули - присваивается. Но суть не совсем в этом. В результате других кликов (не по элементам списка, а по другим блокам) в какой-то момент у элемента "current" удаляется этот класс, но впоследствии должен снова быть присвоен тому элементу, у которого он последний раз был. Как это сделать? Вероятно, нужно перед удалением класса как-то запомнить индекс элемента. Например, получить его посредством .index(). Например:
var exCurrent = $(".elem.current").index();
// Или как вариант:
var exCurrent = $(".elem.current").get(0);


Удалить класс при определенном условии - не проблема. Но что делать потом, когда надо вернуть этот класс обратно конкретно этому элементу?
  • Вопрос задан
  • 233 просмотра
Решения вопроса 1
y0u
@y0u Куратор тега JavaScript
dev
Вместо того, чтобы запоминать индекс элемента, самым простым вариантом, на мой взгляд, будет в момент удаления класса current добавить этому элементу класс ex-current (ведь индекс элемента может изменится в следствии манипуляций с DOM деревом). То есть вы удаляете у элемента класс current, добавляете этому элементу класс ex-current, добавляете класс current новому элементу. В какой-то момент вы кликаете снова на какой-то новый элемент - тогда вы снова удаляете класс current у элемента, удаляете все ex-current классы, снова добавляете ex-current тому элементу, у которого только что удалили current, добавляете новому элементу класс current. Мне это как-то так видится :)
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
lazalu68
@lazalu68
Salmon
Сохраняйте не индекс элемента, а ссылку на элемент:

var current = $('.elem.current');
Ответ написан
Комментировать
// Сохранение индекса
var el = $(".elem.current");
var exCurrent = $(".elem").index(el);

// Восстановление по индексу
$('.elem:eq(' + exCurrent + ')').addClass('current');
Ответ написан
Ваш ответ на вопрос

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

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