jQuery FilterTable

Programovacie jazyky, rady, poradňa...
retsil
Light Star
Light Star
Používateľov profilový obrázok
Príspevky: 293
Registrovaný: 01 jan 2006, 16:02
Bydlisko: ČSR
Kontaktovať používateľa:

jQuery FilterTable

Príspevok od používateľa retsil »

Cao, mam tabulku s viac <tbody> elementami, kazda tato skupina ma nejake pomenovanie. Nad tym mam responzivny filter pomocou FilterTable. Ako by som mohol spravit, aby pri vyhladavani zobrazilo aj ten nazov skupiny, pokial tomu filtru vyhovuje nejaky jeho prvok?
Ukazka tu:

Kód: Vybrať všetko

http://retsil.szm.com/archiv/test.html
Napisem do toho vyhladavaca napr. jeden tak chcem aby tie nazvy "skupina 1" a "skupina dva" boli zobrazene, ale "skupina 3" nie pretoze tomu nevyhovuje ziaden prvok tabulky

Skusal som to cez <thead>, ale to moze byt vramci <table> iba raz a zobrazuje sa vzdy.

Za kazde rady a tipy predom dik!

Mna napadlo zistovat pre kazde tbody kolko tr elementov je visible, pokial viac nez 0 tak ten tr element s th kde je ten popis natvrdo zobrazit, lenze neviem ako to napisat v javascripte

//autoeditácia príspevku (24 Aug 2016, 2:24)
V jquery.filtertable.js by toto malo zobrazit dany riadok tabulky, ktory vyhovuje filtru:

Kód: Vybrať všetko

t.addClass(settings.highlightClass).closest('tr').show().addClass(settings.visibleClass)
Skusal som roznymi kombinaciami closest, find, parent, children sa dopatrat k tomu co potrebujem (zobrazit zaroven prvy tr element prislusneho tbody, kde doslo k zhode), ale nejako sa mi to nedari
Nevie niekto kde mozem robit chybu?
Tu su priklady ako som to skusal:

Kód: Vybrať všetko

t.closest('.desc').show().addClass(settings.visibleClass);

Kód: Vybrať všetko

t.closest('tbody').children('.desc').show().addClass(settings.visibleClass)

Kód: Vybrať všetko

t.parent().parent().find('th').closest('tr').show().addClass(settings.visibleClass)
//autoeditácia príspevku (24 Aug 2016, 3:19)
Tak uz som si poradil :)

Kód: Vybrať všetko

all_tds.filter(':'+settings.filterExpression+'("'+q+'")').closest('tr').parent().children('.desc').show().addClass(settings.visibleClass);
//autoeditácia príspevku (29 Aug 2016, 14:22)
EDIT:
este by som to potreboval upravit tak, aby ten filter nebol "locale sensitive", tj ak tam budem mat napriklad riadky "mäso" alebo "kôň", tak by som chcel aby mi to naslo aj ked napisem len maso ci kon.. Nejaky hint?
Michaelo
Hardcore addict
Hardcore addict
Používateľov profilový obrázok
Príspevky: 6177
Registrovaný: 16 júl 2008, 20:29
Bydlisko: Pri PC
Kontaktovať používateľa:

Re: jQuery FilterTable

Príspevok od používateľa Michaelo »

Byt to SQL, tak by stacilo pouzit unaccent, ale nic take pre JS nieje...

Jedna, nie moc kratka, ale pomerne rychla (cez 120.000 operacii za sekundu) je tato moznost: http://stackoverflow.com/questions/9909 ... es#tab-top

Osobne by som daval vsetky data do TR bez akcentu (ak ich beries z DB a pouzivas PostgreSQL, tak "SELECT unaccent(nieco) FROM tabulka") a potom len prehnal input cez danu JS funkciu a porovnaval takto.
retsil
Light Star
Light Star
Používateľov profilový obrázok
Príspevky: 293
Registrovaný: 01 jan 2006, 16:02
Bydlisko: ČSR
Kontaktovať používateľa:

Re: jQuery FilterTable

Príspevok od používateľa retsil »

no ja prave chcem, aby v tej tabulke boli originalne nazvy.. dik za ten link, nevedel som ani pod akym nazvom to hladat, uz som nasiel dake info pod accent folding alebo unicode normalization.. skusim nieco podobne spravit, ja to asi nebudem potrebovat v takom rozsahu ako je to na tom webe..
Michaelo
Hardcore addict
Hardcore addict
Používateľov profilový obrázok
Príspevky: 6177
Registrovaný: 16 júl 2008, 20:29
Bydlisko: Pri PC
Kontaktovať používateľa:

Re: jQuery FilterTable

Príspevok od používateľa Michaelo »

Tjn, kedze pouzivas filter table, ktory hlada priamo hodnoty v TDckach... Ja by som na to skor napisal nieco vlastneho a pouzival data atributy. Sice by tam bolo o dost viac HTML, ale nemusel by si robit unaccent 2x (teda, presnejsie 1x nad inputom, to by si musel stale, ale potom by si to nemusel robit nad kazdou hodnotou tabulky na kazdy keyup/down).
*****HERO*****
Guru wannabe
Guru wannabe
Používateľov profilový obrázok
Príspevky: 2446
Registrovaný: 08 máj 2006, 1:34

Re: jQuery FilterTable

Príspevok od používateľa *****HERO***** »

da sa to aj priamo vo FilterTable

FilterTable si definuje do jQuery selector "filterTableFind", ktory potom vyuziva na filtrovanie kolekcie TDciek. nazov selectora je konfigurovatelny, tak si mozes definovat vlastny selector (skopirovat povodny), kde ten string este oddiakritičtíš

jQuery < 1.8

Kód: Vybrať všetko

$.expr[':'].filterTableFindUnaccent = function(a, i, m) {
   return $(a).text().toUpperCase().indexOf(unaccent(m[3]).toUpperCase().replace(/"""/g, '"').replace(/"\\"/g, "\\")) >= 0;
};
jQuery >= 1.8

Kód: Vybrať všetko

$.expr[':'].filterTableFindUnaccent = jQuery.expr.createPseudo(function(arg) {
   return function(el) {
       return $(el).text().toUpperCase().indexOf(unaccent(arg).toUpperCase().replace(/"""/g, '"').replace(/"\\"/g, "\\")) >= 0;
   };
});
pri iniciovani to treba poslat do settingov + treba si definovat tu unaccent funkciu, napr tu co sem posielal Michaelo

Kód: Vybrať všetko

<script>
$('table').filterTable({filterExpression : 'filterTableFindUnaccent'}); //if this code appears after your tables; otherwise, include it in your document.ready() code.
</script>
mohlo by to fungovat. v selectore mas referenciu na to TD, takze to nemusis tahat cez $.text(), ale napr. cez $.attr('data-xxx')
Napísať odpoveď