Filtrarea și sortarea dinamică a elementelor din DOM într-o pagină web reprezintă o cerință frecventă în dezvoltarea frontend modernă. Fie că este vorba despre un portofoliu interactiv, o galerie foto, un catalog de produse sau o listă de articole de blog, posibilitatea de a reordona sau ascunde elemente fără reîncărcarea completă a paginii aduce un plus considerabil de uzabilitate și viteză.
Soluții și pluginuri jQuery populare pentru sortare și filtrare
Comunitatea JavaScript și jQuery a dezvoltat de-a lungul timpului numeroase biblioteci dedicate acestui scop. Iată câteva dintre cele mai populare și eficiente opțiuni:
- Quicksand: unul dintre cele mai cunoscute pluginuri jQuery clasice, apreciat pentru animațiile spectaculoase de reordonare a elementelor dintr-o grilă (efect vizual fluid de tip shuffle & fade).
- TinySort: un plugin extrem de ușor și rapid, conceput special pentru sortarea elementelor DOM în funcție de text, numere sau atribute de date personalizate (
data-*). - jQuery UI Sortable: componenta oficială din suita jQuery UI, ideală atunci când este necesară reordonarea interactivă prin acțiuni de tip drag & drop direct de către utilizator.
- Isotope / MixItUp: biblioteci complete pentru layout-uri de tip masonry, oferind capabilități avansate de filtrare multi-criterială și sortare cu accelerare hardware CSS3.
Implementare practică: filtrare și sortare nativă cu jQuery
Dacă dorești o soluție simplă și rapidă fără dependențe externe masive, poți implementa filtrarea și sortarea direct cu ajutorul metodelor native din jQuery și al atributelor HTML5 data-*:
$(document).ready(function() {
// 1. Filtrarea elementelor în funcție de categorie
$('.filter-btn').on('click', function(e) {
e.preventDefault();
const category = $(this).data('filter');
if (category === 'all') {
$('.portfolio-item').fadeIn(300);
} else {
$('.portfolio-item').hide();
$('.portfolio-item[data-category="' + category + '"]').fadeIn(300);
}
});
// 2. Sortarea elementelor (alfabetic sau după preț/dată)
$('#sort-select').on('change', function() {
const criteria = $(this).val(); // ex: 'name' sau 'price'
const $container = $('#items-container');
const $items = $container.children('.portfolio-item').get();
$items.sort(function(a, b) {
const valA = $(a).data(criteria);
const valB = $(b).data(criteria);
if (typeof valA === 'number') {
return valA - valB;
}
return valA.toString().localeCompare(valB.toString());
});
// Reatașarea elementelor sortate în DOM
$.each($items, function(idx, item) {
$container.append(item);
});
});
});
Bune practici pentru performanță
Atunci când manipulezi liste voluminoase în browser, ține cont de următoarele recomandări tehnice:
- Folosește atribute de date semantice: stochează metadatele (categorii, prețuri, timestamp-uri) în atribute
data-*pentru a evita parsarea repetată a șirurilor de text din DOM. - Minimizează reflow-ul și repictarea (repaint): detașează containerul părinte din DOM înainte de sortare sau acumulează modificările într-un
DocumentFragmentdacă lista conține sute de noduri. - Pregătește o stare implicită: afișează un mesaj clar dacă niciun element nu corespunde filtrelor selectate, îmbunătățind astfel experiența vizitatorului.