Eu estava tentando criar uma função de pseudo-busca filtrando os resultados de Taxonomia do Hugo que não faz recursão por todos os nós ou, melhor dizendo, termos relacionados entre si, mais ou menos assim:
|-\ Category 1 |-\ Subcategory 1 |-\ Item 1 |-\ Item 2 |-\ Item 3 |-\ Category 2 |-\ Item 1 |-\ Category 1 |-\ Subcategory |-\ Item 2 |-\ Category 1 |-\ Subcategory |-\ Item 3 |-\ Category 1 |-\ Subcategory
Na verdade, ele retorna algo mais ou menos assim:
|-\ Category 1 |-\ Subcategory 1 |-\ Item 1 |-\ Item 2 |-\ Item 3 |-\ Category 2 |-\ Subcategory 2 |-\ Item 1 |-\ Item 2 |-\ Subcategory 3 |-\ Item 3
Com isso em mente, eu adicionei data attributes em todos os <li>
assim eu poderia obter os nós que casassem com cada condição escolhida em um conjunto de menus dropdown individualmente:
$ ( document ).ready( function() { /** * Aqui seria, na verdade, jQuery.val() sobre os menus dropdwn existentes */ var c1 = 'category 1'; var sc2 = 'subcategory 2'; var taxonomy = $ ( '#taxonomy' ).clone(); // Filtering by Category 1 var byC1 = taxonomy.find( 'li[data-term="' + c1 + '"] ul li' ); // Filtering by Category 2 var bySC2 = taxonomy.find( 'li[data-term="' + sc2 + '"] ul li' ); $ ( '#results' ).append( byC1 ); $ ( '#results' ).append( '<hr />' ); $ ( '#results' ).append( bySC2 ); });
#results { float: right; }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <div id="results">Results</div> <ul id="taxonomy"> <li data-term="category 1"> Category 1 <ul> <li data-term="subcategory 1"> Subcategory 1 <ul> <li>Item 1</li> <li>Item 2</li> <li>Item 3</li> </ul> </li> </ul> </li> <li data-term="category 2"> Category 2 <ul> <li data-term="subcategory 2"> Subcategory 2 <ul> <li>Item 1</li> <li>Item 2</li> </ul> </li> <li data-term="subcategory 3"> Subcategory 3 <ul> <li>Item 3</li> </ul> </li> </ul> </li> </ul>
Como dá pra ver, Item 1
e Item 2
estão presentes em ambas as coleções de nós.
Como eu poderia fazer a interseção de ambas coleções pra ter uma filtragem cumulativa da coleção principal — taxonomy
— removendo todo e qualquer <li>
que não esteja presente na coleção da primeira filtragem e nem, posteriormente, na segunda?