In questo articolo vedremo come creare un portfolio con jQuery e aggiungervi un filtro per categorie. Come vedrete, il codice è incredibilmente semplice una volta che abbiamo compreso il rapporto esistente tra i link del menu delle categorie e i link delle anteprime dei siti. Vediamo insieme i dettagli.
La marcatura è la seguente:
<div id="portfolio">
	<ul id="categories">
		<li><strong>Categorie:</strong></li>
		<li><a href="#" rel="sport">Sport</a></li>
		<li><a href="#" rel="print">Servizi per la stampa</a></li>
		<li><a href="#" rel="culture">Cultura</a></li>
		<li><a href="#" rel="company">Gruppi societari</a></li>
	</ul>
	<ul id="showcase">
	
	  <li>
		
		  <a href="http://www.linea4office.com/" class="print">
		  	<img src="linea4office.jpg" alt="Linea4 Office" />
		  </a>
		
		</li>
	
		<li>
		
		  <a href="http://www.icosfitness.com/" class="sport">
		  	<img src="icosfitness.jpg" alt="Icosfitness" />
		  </a>
		
		</li>
		
		<li>
		
		  <a href="http://www.btmagazine.it/" class="company">
		  	<img src="btmagazine.jpg" alt="BT Magazine" />
		  </a>
		
		</li>
		
				
		<li>
		
		  <a href="http://www.nicolacolecchia.it/" class="culture">
		  	<img src="nicolacolecchia.jpg" alt="Nicola Colecchia" />
		  </a>
		
		</li>
		
		
	
	</ul>
</div>
Il trucco, se così vogliamo chiamarlo, è semplice: il valore dell'attributo rel dei link delle categorie corrisponde al valore delle classi CSS impostate sui link delle anteprime.
Saputo questo, possiamo filtrare i risultati con un ciclo jQuery che riduce l'opacità di quegli elementi i cui link non hanno la classe CSS specificata:
var Portfolio = new function() {
	var categories = $('li', '#categories').not(':first');
	var showCases = $('li', '#showcase');
	
	this.init = function() {
	
		categories.each(function() {
		
			var $li = $(this);
			var $a = $('a', $li);
			var rel = $a.attr('rel');
			
			$a.click(function(event) {
			   
			   showCases.css('opacity', 1);
			
			   showCases.each(function() {
			   
			   		var showCase = $('a', $(this));
			   		
			   		if(!showCase.hasClass(rel)) {
			   		
			   			$(this).css('opacity', 0.5);
			   		
			   		}
			   
			   
			   });
			
			
				event.preventDefault();
			});
		
		
		});
	
	};
}();
Usiamo il metodo hasClass() per verificare se gli elementi hanno o meno la classe CSS del link corrispondente delle categorie. Il nostro codice viene usato nel seguente modo quando il DOM ha ultimato il suo caricamento:
$(function() {
	Portfolio.init();
});
Potete visionare l'esempio finale in questa pagina.