Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Добавить data-lightbox="roadtrip" в <a>, если у родителя есть контр. класс (https://javascript.ru/forum/jquery/67854-dobavit-data-lightbox%3D-roadtrip-v-esli-u-roditelya-est-kontr-klass.html)

askECMA 12.03.2017 02:11

Добавить data-lightbox="roadtrip" в <a>, если у родителя есть контр. класс
 
Добрый ночи, друзья.
Прошу прощения, если название заголовка сформулировано некорректно.
Подскажите, как решить следующую задачу.

У меня есть галерея с фильтрацией. Фильтр отлично работает, выводит на экран картинки согласно выбранной теме (по нажатию на кнопку навигации), однако при открытии картинки в модальном окне выводит картинку всего потока. То есть картинки фильтруются, а модальное окно работает только по всем картинкам.

Хочу решить эту проблему следующим способом.
Так как плагин срабатывает при наличие в ссылке <a data-lightbox="roadtrip">, то необходимо, чтобы при нажатии на кнопку фильтра (Theme1), в ссылке <a> добавлялся lightbox="roadtrip" при условии, что в у родителя есть класс (Theme1) или (Theme1 Theme2). Тогда в модульном окне будут в потоке необходимые картинки.

Структура:

<nav>
<ul id="filters">
<li><span class="filter active" data-filter="Theme1 Theme2 Theme3">Все темы</span></li>
<li><span class="filter" data-filter="Theme1">Тема 1</span></li>
<li><span class="filter" data-filter="Theme2">Тема 2</span></li>
<li><span class="filter" data-filter="Theme3">Тема 3</span></li>
</ul>
</nav>

<class="gallery">
<ul>
<li class="Theme1"><a href="img/content-full/1.jpg"><img src="img/content/1.jpg" alt=""></a></li>
<li class="Theme2"><a href="img/content-full/2.jpg"><img src="img/content/2.jpg" alt=""></a></li>
<li class="Theme1 Theme2"><a href="img/content-full/3.jpg"><img src="img/content/3.jpg" alt=""></a></li>
</ul>
<div>


Что должен сделать скрипт:
a) При нажатии на фильтр Тема 1

<ul id="filters">
 <li><span class="filter active" data-filter="Theme1 Theme2 Theme3">Все темы</span></li>
 <li><span class="filter" data-filter="Theme1">Тема 1</span></li>
 <li><span class="filter" data-filter="Theme2">Тема 2</span></li>
 <li><span class="filter" data-filter="Theme3">Тема 3</span></li>
</ul>

b) Добавить  data-lightbox="roadtrip" в <a> при условии, что у родителя имеется class="Theme1"

до:
<ul>
 <li class="Theme1"><a href="img/content-full/1.jpg"><img src="img/content/1.jpg" alt=""></a></li>
 <li class="Theme2"><a href="img/content-full/2.jpg"><img src="img/content/2.jpg" alt=""></a></li>
 <li class="Theme1 Theme2"><a href="img/content-full/3.jpg"><img src="img/content/3.jpg" alt=""></a></li>
</ul>

после скрипта:

<ul>
 <li class="Theme1"><a href="img/content-full/1.jpg" data-lightbox="roadtrip"><img src="img/content/1.jpg" alt=""></a></li>
 <li class="Theme2"><a href="img/content-full/2.jpg"><img src="img/content/2.jpg" alt=""></a></li>
 <li class="Theme1 Theme2"><a href="img/content-full/3.jpg" data-lightbox="roadtrip"><img src="img/content/3.jpg" alt=""></a></li>
</ul>


Желательно, чтобы после нажатия другую кнопку фильтра (Тема 2, к примеру), сначала удалялись data-lightbox="roadtrip", во всех <a> списка с картинками, а затем выполнялось действие b)

до:
<ul>
 <li class="Theme1"><a href="img/content-full/1.jpg" data-lightbox="roadtrip"><img src="img/content/1.jpg" alt=""></a></li>
 <li class="Theme2"><a href="img/content-full/2.jpg"><img src="img/content/2.jpg" alt=""></a></li>
 <li class="Theme1 Theme2"><a href="img/content-full/3.jpg" data-lightbox="roadtrip"><img src="img/content/3.jpg" alt=""></a></li>
</ul>

после 

<ul>
 <li class="Theme1"><a href="img/content-full/1.jpg"><img src="img/content/1.jpg" alt=""></a></li>
 <li class="Theme2"><a href="img/content-full/2.jpg" data-lightbox="roadtrip"><img src="img/content/2.jpg" alt=""></a></li>
 <li class="Theme1 Theme2"><a href="img/content-full/3.jpg" data-lightbox="roadtrip"><img src="img/content/3.jpg" alt=""></a></li>
</ul>


Задача нетрудная, но я еще плохо разбираюсь в JS и JQuery, надеюсь, мы вместе сможем решить эту задачу. :)

рони 12.03.2017 02:59

askECMA,
может в фильтр и добавить изменение data-lightbox

askECMA 12.03.2017 11:57

Как это реализовать?

рони 12.03.2017 12:06

askECMA,
а как устроен ваш фильтр?

askECMA 12.03.2017 12:31

Плагин Mixitup, по-моему он только фильтрует картинки.
Мне нужно навесить data-lightbox, чтобы совместить второй плагин

рони 12.03.2017 15:22

Mixitup и атрибут для lightbox
 
askECMA,
добавить в Mixitup
,
  callbacks: {
    onMixEnd: function(state){
      $(state.$hide).find("a").removeAttr("data-lightbox");
      $(state.$show).find("a").attr("data-lightbox" , "roadtrip");
    }
  }


Часовой пояс GMT +3, время: 14:46.