JSFiddle - React, Tailwind, and code Playground

by kirrrusha

HTML

<div class="fd">
  <div class="wrapper" id="slider">
    <div class="tabs">
      <ul>
        <li data-filter="*">All</li>
        <li data-filter="graphics">graphics</li>
        <li data-filter="love">Filter2</li>
        <li data-filter="coffee">Filter3</li>
      </ul>
    </div>
    <div class="entities">
      <ul>
        <li class="love">Love1</li>
        <li class="graphics">Graphics1</li>
        <li class="coffee">Coffee1</li>
        <li class="love">Love2</li>
        <li class="graphics">Graphics1</li>
        <li class="coffee">Coffee2</li>
      </ul>
    </div>
  </div>
  <div class="wrapper" id="conform">
    <div class="tabs">
      <ul>
        <li data-filter="*">All</li>
        <li data-filter="graphics">graphics</li>
        <li data-filter="love">Filter2</li>
        <li data-filter="coffee">Filter3</li>
      </ul>
    </div>
    <div class="entities">
      <ul>
        <li class="love">Love1</li>
        <li class="graphics">Graphics1</li>
        <li class="coffee">Coffee1</li>
        <li class="love">Love2</li>
        <li class="graphics">Graphics1</li>
        <li class="coffee">Coffee2</li>
      </ul>
    </div>
  </div>
</div>

CSS

.hidden {
  display: none;
}

JavaScript

(function() {
  window.selectPlugin = selectPlugin;

  function selectPlugin() {
    var filters = null,
      entities = null;

    function setSelectors(cssFiltersClass, cssEntitiesClass) {
      filters = document.querySelectorAll(cssFiltersClass);
      entities = document.querySelectorAll(cssEntitiesClass);
    }

    function run() {
      filters.forEach(filterForEach); // фильтр обработки событий по клику на .tabs
      function filterForEach(item) {
        item.addEventListener('click', eventListener); //функция для работы с объектом обработчик событий по click
      }

      function eventListener(event) {
        var filterName = event.target.getAttribute("data-filter"); // присваивает в переменную атрибут data-filter

        entities.forEach(function(entity) { // сама логика работы обработчика
          if (filterName == '*' || entity.classList.contains(filterName)) {
            entity.classList.remove('hidden');
          } else {
            entity.classList.add('hidden');
          }
        })
      }
    }


    return {
      setSelectors: setSelectors,
      run: run
    };
  }
}())


var selector1 = new window.selectPlugin();
selector1.setSelectors("#slider .tabs", "#slider .entities ul li");
selector1.run();
var selector2 = new window.selectPlugin();
selector2.setSelectors("#conform .tabs", "#conform .entities ul li");
selector2.run();