filtering.html 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268
  1. <!doctype html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="utf-8" />
  5. <title>Filtering &middot; Isotope Docs</title>
  6. <!--[if lt IE 9]><script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script><![endif]-->
  7. <link rel="stylesheet" href="../css/style.css" />
  8. <!-- scripts at bottom of page -->
  9. </head>
  10. <body class="docs ">
  11. <nav id="site-nav">
  12. <h1><a href="../index.html">Isotope</a></h1>
  13. <h2>Docs</h2>
  14. <ul>
  15. <li><a href="../docs/introduction.html">Introduction</a>
  16. <li><a href="../docs/options.html">Options</a>
  17. <li><a href="../docs/methods.html">Methods</a>
  18. <li><a href="../docs/layout-modes.html">Layout modes</a>
  19. <li class="current"><a href="#content">Filtering</a>
  20. <ul class="toc">
  21. <li><a href="#markup">Markup</a></li>
  22. <li><a href="#jquery_script">jQuery script</a></li>
  23. <li><a href="#creating_interactive_buttons">Creating interactive buttons</a></li>
  24. <li><a href="#recommended_css">Recommended CSS</a></li>
  25. </ul>
  26. </li>
  27. <li><a href="../docs/sorting.html">Sorting</a>
  28. <li><a href="../docs/animating.html">Animating</a>
  29. <li><a href="../docs/adding-items.html">Adding items</a>
  30. <li><a href="../docs/extending-isotope.html">Extending Isotope</a>
  31. <li><a href="../docs/hash-history-jquery-bbq.html">Hash history with jQuery BBQ</a>
  32. <li><a href="../docs/help.html">Help</a>
  33. <li><a href="../docs/license.html">License</a>
  34. </ul>
  35. <h2>Demos</h2>
  36. <ul>
  37. <li><a href="../demos/basic.html">Basic</a>
  38. <li><a href="../demos/elements-complete.html">Elements Complete</a>
  39. <li><a href="../demos/elements-partial.html">Elements Partial</a>
  40. <li><a href="../demos/layout-modes.html">Layout modes</a>
  41. <li><a href="../demos/filtering.html">Filtering</a>
  42. <li><a href="../demos/sorting.html">Sorting</a>
  43. <li><a href="../demos/relayout.html">reLayout</a>
  44. <li><a href="../demos/adding-items.html">Adding items</a>
  45. <li><a href="../demos/infinite-scroll.html">Infinite Scroll</a>
  46. <li><a href="../demos/images.html">Images</a>
  47. <li><a href="../demos/combination-filters.html">Combination filters</a>
  48. <li><a href="../demos/hash-history.html">Hash history</a>
  49. <li><a href="../demos/fluid-responsive.html">Fluid / responsive</a>
  50. </ul>
  51. <h2>Custom layout modes</h2>
  52. <ul>
  53. <li><a href="../custom-layout-modes/centered-masonry.html">Centered Masonry</a>
  54. <li><a href="../custom-layout-modes/category-rows.html">Category rows</a>
  55. <li><a href="../custom-layout-modes/masonry-corner-stamp.html">Masonry corner stamp</a>
  56. <li><a href="../custom-layout-modes/masonry-gutters.html">Masonry gutters</a>
  57. <li><a href="../custom-layout-modes/spine-align.html">Spine align</a>
  58. </ul>
  59. <h2><a href="../tests/index.html">Tests</a></h2>
  60. </nav> <!-- #site-nav -->
  61. <section id="content">
  62. <h1>Filtering</h1>
  63. <p>Isotope can hide and show item elements via the <a href='options.html#filter'><code>filter</code> option</a>. <code>filter</code> accepts a jQuery selector. Items that match that selector will be shown. Items that do not match will be hidden.</p>
  64. <p><a href='../demos/filtering.html'><strong>See Demo: Filtering</strong></a></p>
  65. <h2 id='markup'>Markup</h2>
  66. <p>Each item element has several identifying classes. In this case, <code>transition</code>, <code>metal</code>, <code>lanthanoid</code>, <code>alkali</code>, etc.</p>
  67. <div class='highlight'><pre><code class='html'><span class='nt'>&lt;div</span> <span class='na'>id=</span><span class='s'>&quot;container&quot;</span><span class='nt'>&gt;</span>
  68. <span class='nt'>&lt;div</span> <span class='na'>class=</span><span class='s'>&quot;element transition metal&quot;</span><span class='nt'>&gt;</span>...<span class='nt'>&lt;/div&gt;</span>
  69. <span class='nt'>&lt;div</span> <span class='na'>class=</span><span class='s'>&quot;element post-transition metal&quot;</span><span class='nt'>&gt;</span>...<span class='nt'>&lt;/div&gt;</span>
  70. <span class='nt'>&lt;div</span> <span class='na'>class=</span><span class='s'>&quot;element alkali metal&quot;</span><span class='nt'>&gt;</span>...<span class='nt'>&lt;/div&gt;</span>
  71. <span class='nt'>&lt;div</span> <span class='na'>class=</span><span class='s'>&quot;element transition metal&quot;</span><span class='nt'>&gt;</span>...<span class='nt'>&lt;/div&gt;</span>
  72. <span class='nt'>&lt;div</span> <span class='na'>class=</span><span class='s'>&quot;element lanthanoid metal inner-transition&quot;</span><span class='nt'>&gt;</span>...<span class='nt'>&lt;/div&gt;</span>
  73. <span class='nt'>&lt;div</span> <span class='na'>class=</span><span class='s'>&quot;element halogen nonmetal&quot;</span><span class='nt'>&gt;</span>...<span class='nt'>&lt;/div&gt;</span>
  74. <span class='nt'>&lt;div</span> <span class='na'>class=</span><span class='s'>&quot;element alkaline-earth metal&quot;</span><span class='nt'>&gt;</span>...<span class='nt'>&lt;/div&gt;</span>
  75. ...
  76. <span class='nt'>&lt;/div&gt;</span>
  77. </code></pre>
  78. </div>
  79. <h2 id='jquery_script'>jQuery script</h2>
  80. <p>To show only <code>.metal</code> items, the jQuery script would be:</p>
  81. <div class='highlight'><pre><code class='javascript'><span class='nx'>$</span><span class='p'>(</span><span class='s1'>&#39;#container&#39;</span><span class='p'>).</span><span class='nx'>isotope</span><span class='p'>({</span> <span class='nx'>filter</span><span class='o'>:</span> <span class='s1'>&#39;.metal&#39;</span> <span class='p'>});</span>
  82. </code></pre>
  83. </div>
  84. <p>The <code>filter</code> option uses a <a href='http://api.jquery.com/category/selectors/'>jQuery selector</a> to show item elements that match a selector, and hide all others that do not. For example:</p>
  85. <ul>
  86. <li><code>.alkali, .alkaline-earth</code> will show <code>.alkali</code> AND <code> .alkaline-earth</code> item elements.</li>
  87. <li><code>.metal.transition</code> will show item elements that have BOTH <code>.metal</code> and <code>.transition</code> classes.</li>
  88. <li><code>.metal:not(.transition)</code> will show <code>.metal</code> item elements that are NOT <code>.transition</code>.</li>
  89. </ul>
  90. <h2 id='creating_interactive_buttons'>Creating interactive buttons</h2>
  91. <p>Let&#8217;s use a basic list for our buttons</p>
  92. <div class='highlight'><pre><code class='html'><span class='nt'>&lt;ul</span> <span class='na'>id=</span><span class='s'>&quot;filters&quot;</span><span class='nt'>&gt;</span>
  93. <span class='nt'>&lt;li&gt;&lt;a</span> <span class='na'>href=</span><span class='s'>&quot;#&quot;</span> <span class='na'>data-filter=</span><span class='s'>&quot;*&quot;</span><span class='nt'>&gt;</span>show all<span class='nt'>&lt;/a&gt;&lt;/li&gt;</span>
  94. <span class='nt'>&lt;li&gt;&lt;a</span> <span class='na'>href=</span><span class='s'>&quot;#&quot;</span> <span class='na'>data-filter=</span><span class='s'>&quot;.metal&quot;</span><span class='nt'>&gt;</span>metal<span class='nt'>&lt;/a&gt;&lt;/li&gt;</span>
  95. <span class='nt'>&lt;li&gt;&lt;a</span> <span class='na'>href=</span><span class='s'>&quot;#&quot;</span> <span class='na'>data-filter=</span><span class='s'>&quot;.transition&quot;</span><span class='nt'>&gt;</span>transition<span class='nt'>&lt;/a&gt;&lt;/li&gt;</span>
  96. <span class='nt'>&lt;li&gt;&lt;a</span> <span class='na'>href=</span><span class='s'>&quot;#&quot;</span> <span class='na'>data-filter=</span><span class='s'>&quot;.alkali, .alkaline-earth&quot;</span><span class='nt'>&gt;</span>alkali and alkaline-earth<span class='nt'>&lt;/a&gt;&lt;/li&gt;</span>
  97. <span class='nt'>&lt;li&gt;&lt;a</span> <span class='na'>href=</span><span class='s'>&quot;#&quot;</span> <span class='na'>data-filter=</span><span class='s'>&quot;:not(.transition)&quot;</span><span class='nt'>&gt;</span>not transition<span class='nt'>&lt;/a&gt;&lt;/li&gt;</span>
  98. <span class='nt'>&lt;li&gt;&lt;a</span> <span class='na'>href=</span><span class='s'>&quot;#&quot;</span> <span class='na'>data-filter=</span><span class='s'>&quot;.metal:not(.transition)&quot;</span><span class='nt'>&gt;</span>metal but not transition<span class='nt'>&lt;/a&gt;&lt;/li&gt;</span>
  99. <span class='nt'>&lt;/ul&gt;</span>
  100. </code></pre>
  101. </div>
  102. <p>Here we set the filter for each link with a <code>data-filter</code> attribute. In our jQuery script, whenever a link is clicked, we&#8217;ll use this attribute as the filter selector.</p>
  103. <div class='highlight'><pre><code class='javascript'><span class='c1'>// cache container</span>
  104. <span class='kd'>var</span> <span class='nx'>$container</span> <span class='o'>=</span> <span class='nx'>$</span><span class='p'>(</span><span class='s1'>&#39;#container&#39;</span><span class='p'>);</span>
  105. <span class='c1'>// initialize isotope</span>
  106. <span class='nx'>$container</span><span class='p'>.</span><span class='nx'>isotope</span><span class='p'>({</span>
  107. <span class='c1'>// options...</span>
  108. <span class='p'>});</span>
  109. <span class='c1'>// filter items when filter link is clicked</span>
  110. <span class='nx'>$</span><span class='p'>(</span><span class='s1'>&#39;#filters a&#39;</span><span class='p'>).</span><span class='nx'>click</span><span class='p'>(</span><span class='kd'>function</span><span class='p'>(){</span>
  111. <span class='kd'>var</span> <span class='nx'>selector</span> <span class='o'>=</span> <span class='nx'>$</span><span class='p'>(</span><span class='k'>this</span><span class='p'>).</span><span class='nx'>attr</span><span class='p'>(</span><span class='s1'>&#39;data-filter&#39;</span><span class='p'>);</span>
  112. <span class='nx'>$container</span><span class='p'>.</span><span class='nx'>isotope</span><span class='p'>({</span> <span class='nx'>filter</span><span class='o'>:</span> <span class='nx'>selector</span> <span class='p'>});</span>
  113. <span class='k'>return</span> <span class='kc'>false</span><span class='p'>;</span>
  114. <span class='p'>});</span>
  115. </code></pre>
  116. </div>
  117. <h2 id='recommended_css'>Recommended CSS</h2>
  118. <p>If you choose to use the filtering functionality, add the following CSS to your stylesheet:</p>
  119. <div class='highlight'><pre><code class='css'><span class='c'>/**** Isotope filtering ****/</span>
  120. <span class='nc'>.isotope-item</span> <span class='p'>{</span>
  121. <span class='k'>z-index</span><span class='o'>:</span> <span class='m'>2</span><span class='p'>;</span>
  122. <span class='p'>}</span>
  123. <span class='nc'>.isotope-hidden.isotope-item</span> <span class='p'>{</span>
  124. <span class='k'>pointer</span><span class='o'>-</span><span class='n'>events</span><span class='o'>:</span> <span class='k'>none</span><span class='p'>;</span>
  125. <span class='k'>z-index</span><span class='o'>:</span> <span class='m'>1</span><span class='p'>;</span>
  126. <span class='p'>}</span>
  127. </code></pre>
  128. </div>
  129. <p>These styles ensure that hidden items will not interfere with interactions.</p>
  130. <footer>
  131. Isotope by <a href="http://desandro.com">David DeSandro</a> / <a href="http://metafizzy.co">Metafizzy</a>
  132. </footer>
  133. </section> <!-- #content -->
  134. </body>
  135. </html>