Написать на js фильтр для вывода данных по категориям
Есть хедер с селектами и есть блок со списком, который выводит все игры. Нужно написать фильтр на js (можно использовать jquery) который будет выводить игры в соответствии с выбранным пунктом селекта. Например: выбрали RPG - появились все RPG, добавили еще скажем платформу Android - вывелись все RPG но уже только на Android, добавили страну скажем Russia, теперь выводятся только RPG на Android из Russia. Ну и если мы возвращаем какую-то категорию в дефолтное состояние, скажем Country(all) то выводится уже только RPG + Android но со всех стран. Жанр, платформа и страна хранятся в data-game в элементах li. Подскажите как такое возможно сделать?
<header> <ul> <li> <select name="" id="genre"> <option value="">Genre(all)</option> <option value="rpg">RPG</option> <option value="shooter">Shooter</option> <option value="strategy">Strategy</option> <option value="action">Action</option> <option value="arcade">Arcade</option> </select> </li> <li> <select name="" id="platform"> <option value="">Platform(all)</option> <option value="pc">PC</option> <option value="android">Android</option> <option value="ps3">PS3</option> </select> </li> <li> <select name="" id="country"> <option value="">Country(all)</option> <option value="usa">USA</option> <option value="russia">Russia</option> <option value="england">England</option> <option value="ukraine">Ukraine</option> </select> </li> </ul> </header> <section> <ul> <li data-game="g-rpg p-pc c-usa"> <div class="img"></div> <p>World of Tanks</p> </li> <li data-game="g-shooter p-pc c-usa"> <div class="img"></div> <p>Counter Strike</p> </li> <li class="n" data-game="g-strategy p-pc c-russia"> <div class="img"></div> <p>Heroes of Might and Magic</p> </li> <li class="n" data-game="g-strategy p-pc c-england"> <div class="img"></div> <p>Civilization</p> </li> <li class="n" data-game="g-shooter p-pc c-usa"> <div class="img"></div> <p>Crysis</p> </li> <li class="n" data-game="g-arcade p-android c-ukraine"> <div class="img"></div> <p>Boxes</p> </li> <li class="n" data-game="g-action p-ps3 c-usa"> <div class="img"></div> <p>The last of us</p> </li> </ul> </section> |
А как эти записи хранятся в базе? Неужто страна, это не идентификатор числовой, а игры тоже не под уникальными идентификаторами?
Это к тому, что страна А, это id 1, страна Б, это id 2, и т.д. Стратегии это id 1, стрелялки, это id 2. И тогда сортировать нужно по маске: 21, 11 и т.д. |
В базе ничего не хранится, просто задача состоит в том чтоб сделать это просто на js с использованием data у элементов, без баз данных и ajax и php
|
Цитата:
<!DOCTYPE html> <html> <head> <meta http-equiv='Content-Type' content='text/html; charset=windows-1251' /> <script src='http://code.jquery.com/jquery-latest.js'></script> <!-- <script src="https://code.angularjs.org/1.3.9/angular.min.js"></script> <script src="https://code.angularjs.org/1.3.9/angular-route.js"></script> <link rel='stylesheet type=text/css href=tmp.css' /> <link rel="stylesheet/less" type="text/css" href="style.less"> <script src="http://cdnjs.cloudflare.com/ajax/libs/less.js/2.5.0/less.min.js"></script> --> <style type='text/css'> </style> <script type='text/javascript'> $(function(){ $('select').change(function(){ var slct=''; $('select').each(function(){ var val=this.value if (val!='') { val='.'+this.id.valueOf()[0]+'-'+val; slct+=val; }; }); $('section li').hide().filter(slct).show(); }); }); </script> </head> <body> <header> <ul> <li> <select name="" id="genre"> <option value="">Genre(all)</option> <option value="rpg">RPG</option> <option value="shooter">Shooter</option> <option value="strategy">Strategy</option> <option value="action">Action</option> <option value="arcade">Arcade</option> </select> </li> <li> <select name="" id="platform"> <option value="">Platform(all)</option> <option value="pc">PC</option> <option value="android">Android</option> <option value="ps3">PS3</option> </select> </li> <li> <select name="" id="country"> <option value="">Country(all)</option> <option value="usa">USA</option> <option value="russia">Russia</option> <option value="england">England</option> <option value="ukraine">Ukraine</option> </select> </li> </ul> </header> <section> <ul> <li class="g-rpg p-pc c-usa"> <div class="img"></div> <p>World of Tanks</p> </li> <li class="g-shooter p-pc c-usa"> <div class="img"></div> <p>Counter Strike</p> </li> <li class="n g-strategy p-pc c-russia"> <div class="img"></div> <p>Heroes of Might and Magic</p> </li> <li class="n g-strategy p-pc c-england"> <div class="img"></div> <p>Civilization</p> </li> <li class="n g-shooter p-pc c-usa"> <div class="img"></div> <p>Crysis</p> </li> <li class="n g-arcade p-android c-ukraine"> <div class="img"></div> <p>Boxes</p> </li> <li class="n g-action p-ps3 c-usa"> <div class="img"></div> <p>The last of us</p> </li> </ul> </section> </body> </html> |
Цитата:
<!DOCTYPE html> <html> <head> <meta http-equiv='Content-Type' content='text/html; charset=windows-1251' /> <script src='http://code.jquery.com/jquery-latest.js'></script> <!-- <script src="https://code.angularjs.org/1.3.9/angular.min.js"></script> <script src="https://code.angularjs.org/1.3.9/angular-route.js"></script> <link rel='stylesheet type=text/css href=tmp.css' /> <link rel="stylesheet/less" type="text/css" href="style.less"> <script src="http://cdnjs.cloudflare.com/ajax/libs/less.js/2.5.0/less.min.js"></script> --> <style type='text/css'> </style> <script type='text/javascript'> $(function(){ $('select').change(function(){ $('section li').show(); $('select').each(function(){ var val=this.value if (val!='') { val=this.id.valueOf()[0]+'-'+val; $('section li:not([data-game*="'+val+'"])').hide(); }; }); }); }); </script> </head> <body> <header> <ul> <li> <select name="" id="genre"> <option value="">Genre(all)</option> <option value="rpg">RPG</option> <option value="shooter">Shooter</option> <option value="strategy">Strategy</option> <option value="action">Action</option> <option value="arcade">Arcade</option> </select> </li> <li> <select name="" id="platform"> <option value="">Platform(all)</option> <option value="pc">PC</option> <option value="android">Android</option> <option value="ps3">PS3</option> </select> </li> <li> <select name="" id="country"> <option value="">Country(all)</option> <option value="usa">USA</option> <option value="russia">Russia</option> <option value="england">England</option> <option value="ukraine">Ukraine</option> </select> </li> </ul> </header> <section> <ul> <li data-game="g-rpg p-pc c-usa"> <div class="img"></div> <p>World of Tanks</p> </li> <li data-game="g-shooter p-pc c-usa"> <div class="img"></div> <p>Counter Strike</p> </li> <li class="n" data-game="g-strategy p-pc c-russia"> <div class="img"></div> <p>Heroes of Might and Magic</p> </li> <li class="n" data-game="g-strategy p-pc c-england"> <div class="img"></div> <p>Civilization</p> </li> <li class="n" data-game="g-shooter p-pc c-usa"> <div class="img"></div> <p>Crysis</p> </li> <li class="n" data-game="g-arcade p-android c-ukraine"> <div class="img"></div> <p>Boxes</p> </li> <li class="n" data-game="g-action p-ps3 c-usa"> <div class="img"></div> <p>The last of us</p> </li> </ul> </section> </body> </html> |
Да идеально, спасибо:yes:
Не посоветуете сайты, книги, задачники по js (кроме это сайта), я заметил что у меня проблема с составлением алгоритмов при решении задач, как это можно подтянуть не подскажите? Тут очень простое и лаконичное решение, то что мне и нужно |
Цитата:
Плюс не паханое поле по решению всяких задач типа семестровые, курсовые, дипломные... Т.ч. посоветовать какую-то книгу по построению алгоритмов я, пожалуй, не смогу... :( Тебе остается только самому уповать на свою же практику... Смотреть какие решения предлагают другие на этом форуме, разбираться в них... А самое главное начать решать самому. Без этого вообще ничего не получится. :) |
Дельный совет, спасибо, форум конечно очень хороший
|
Help!! помогите этот фильтр применить к вот такой конструкции:
Вместо селекта будут стилизованные блоки div (в активном положении будут с ярким бордером) вот сам фильтр: <div id="filter"> <!--Стекло--> <div class="active"><a class="all" href="#">Все</a></div> <div><a class="st" href="#">Остекленная</a></div> <div><a class="gl" href="#">Глухая</a></div> <!--Цвет--> <div class="active"><a class="all" href="#">Все</a></div> <div><a class="milan" href="#">Миланский орех</a></div> <div><a class="italian" href="#">Итальянский орех</a></div> <div><a class="venge" href="#">Венге</a></div> </div> и айтемы тоже не в li a в дивах вот сами айтемы: <div class="items"> <!--item1--> <div class="item" data-blabla="venge st"> <div>...</div> </div> <!--item2--> <div class="item" data-blabla="milan st"> <div>...</div> </div> <!--item3--> <div class="item" data-blabla="italian gl"> <div>...</div> </div> именно дивы в фильтре хочу использовать для того чтобы их красиво стилизовать под цвет айтемов вот пример: ![]() |
Часовой пояс GMT +3, время: 08:43. |