Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Оптимизация фильтрации и показа (https://javascript.ru/forum/events/44472-optimizaciya-filtracii-i-pokaza.html)

XFlame 21.01.2014 13:33

Оптимизация фильтрации и показа
 
Уважаемые знатоки!
Подскажите новичку ))
Допустим есть такая разметка:
<div id="container">
  <div id="nav">
    <a href="#title1">Показать только Title 1</a>
    <a href="#title2">Показать только Title 2</a>
    <a href="#title3">Показать только Title 3</a>
    <!-- и так далее -->
  </div>
  <div id="title1" class="panel">Title 1</div>
  <div id="title2" class="panel">Title 2</div>
  <div id="title3" class="panel">Title 3</div>
    <!-- и так далее -->
</div>


Мне нужно, чтобы при клике на ссылку показывался только соответствующий ей блок. Таких блоков будет где-то 30-40 штук.

Я делаю так:
$(document).ready(function(){
    $('#nav a[href="#title1"]').click(function(){
      $('.panel').hide();
      $('#title1').show();
    });
    $('#nav a[href="#title2"]').click(function(){
      $('.panel').hide();
      $('#title2').show();
    });
    $('#nav a[href="#title3"]').click(function(){
      $('.panel').hide();
      $('#title3').show();
    });
    // и так далее
});


Но, я подозреваю, что этот код можно упростить, например, как-то так:
1. Отследить клик по ссылке внутри блока #nav.
2. Занести в переменную соответствующее значение href.
2. Спрятать все блоки с классом .panel
3. Вывести блок с id (из переменной)

Как это практически сделать? А может есть еще более простое решение?

рони 21.01.2014 14:13

XFlame,
:write:
<!DOCTYPE HTML>
<html>
<head>
  <title>Untitled</title>
  <meta charset="utf-8">
  <style type="text/css">
  .panel{
    display: none;
  }

  </style>
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
  <script>
$(document).ready(function () {
   var $title = $('a[href ^= #title]'), $panel = $('.panel');
    $('#container').on('click', $title, function (event) {
        var id = event.target.hash, div = $(id);
        $panel.not(div).slideUp()
        div.slideToggle();
        return false
    });
});
  </script>
</head>
<body>
<div id="container">
  <div id="nav">
    <a href="#title1">Показать/Скрыть только Title 1</a>
    <a href="#title2">Показать/Скрыть только Title 2</a>
    <a href="#title3">Показать/Скрыть только Title 3</a>
    <!-- и так далее -->
  </div>
  <div id="title1" class="panel">Title 1</div>
  <div id="title2" class="panel">Title 2</div>
  <div id="title3" class="panel">Title 3</div>
    <!-- и так далее -->
</div>
</body>
</html>


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