Avatar billede heyn Nybegynder
18. marts 2013 - 11:15 Der er 9 kommentarer og
1 løsning

Sortere vise/gemme rækker i en tabel med JQuery

Hej Eksperter

Jeg er ret ny udi JQuery og har et akut problem.

Jeg har et søgefelt og en tabel.

Mit mål er at når der intet står i søgefeltet vises der ingen rækker i tabellen. Hvis jeg f.eks. skriver 'a' i søgefeltet skal alle rækker hvor navnet på produktet indeholder 'a' vises. Hvis jeg skriver 'an' skal kun produkter hvor navnet indeholder 'an' vises etc.
Med JQuery er jeg nået så langt at jeg kan vise/skjule alle rækker. Jeg kan også vise en enkelt række fra starten. Men nu er jeg kørt helt fast.
Har nogen en ide til hvordan jeg kommer videre?

Venligst Christian
Avatar billede olebole Juniormester
18. marts 2013 - 15:42 #1
<ole>

Resten er næppe en jQuery-opgave. Det løser du med ganske almindelig JavaScript

/mvh
</bole>
Avatar billede olebole Juniormester
18. marts 2013 - 15:43 #2
- men det lyder, som om du lader brugeren downloade alle data fra start. Er det hensigtsmæssigt?
Avatar billede heyn Nybegynder
18. marts 2013 - 16:27 #3
Ja - Det er i dette tilfælde hensigtsmæssigt, da serveren her er langsom, og derfor ikke må belastes for ofte. Den fungerer nemlig samtidig som kasseapparat. Hellere hente mange data én gang end hente få mange gange.

Er det ikke muligt i JQuery muligt på en nem måde at lave en funktion der ved at læse på et felts value og foretager sammenligning fjerner alle linier i tabellen, og derefter viser de relevante?
Jeg forestillede mig noget i stil med at
$('#searcetext').change(function(){
  1) SKJULER ALLE RÆKKER
  2) EN RUTINE DER TJEKKER ALLE NAVNE I RÆKKERNE OG VISER DE
    RELEVANTE RÆKKER
})
Er det muligt hvis f.eks. tabellen har id="resulttabel"?
Findes der i JQuery en måde hvorpå man kunne skrive f.eks.
$('#resultattabel tr').EN_FUNKTION
således at alle rækker vil blive tjekket når teksten i søgefeltet ændres?
Selve dette med at læse en streng fra et felt, trimme den og tjekke om den er en del af en anden streng kan jeg godt klare.
Det er dette mede at lave en rutine der skjule og vise de rækker der er relevante der er problemet.

Christian
Avatar billede olebole Juniormester
18. marts 2013 - 16:43 #4
Jeg tror, du har misforstået meningen/brugen af jQuery. Selve udvælgelsen af de rækker, der skal vises, foretages med almindelig JavaScript - mens DOM-handlingerne udføres med jQuery.
Avatar billede olebole Juniormester
18. marts 2013 - 16:51 #5
Det mest hensigtsmæssige ville formodentligt være at opbygge en datamodel, repræsenterende tabellen - og så bruge den til at udvælge rækkerne, der skal vises/skjules i tabellen. Det er i forvejen en sløv løsning, og at aflæse cellernes indhold ved hver handling gør det blot endnu mere sløvt.
Avatar billede heyn Nybegynder
18. marts 2013 - 17:11 #6
Datamodel?
Mener du noget i stil med et array der indeholder rækkeid og værdi af navn for alle rækker, således at man gennemsøger arrayet fra ende til anden hver gang der er change?

Jeg så en side http://www.digital-web.com/articles/jquery_crash_course/ som førte til resultatet http://www.digital-web.com/extras/jquery_crash_course/ .

Jeg må indrømme at jeg endnu ikke helt fatter det alt sammen, men jeg kan da se at tabellen forneden viser og skjuler en serie af tbody.

Det er noget i den stil jeg ønsker, men elementerne i tabellen skal bare vises ved change i søgefeltet i stedet for når et sæde vælges i flyet.
Avatar billede olebole Juniormester
18. marts 2013 - 17:48 #7
Ja, det kan måske være et array - og måske et objekt - og måske en kombination. Det er ikke til at sige uden at kende projektet nærmere.

Nej, hvis man skal tro resten af det, du skriver, er det, du ønsker og det, du linker til, to meget forskellige ting
Avatar billede heyn Nybegynder
19. marts 2013 - 16:52 #8
Jeg nåede frem til følgende løsning

$('#searchprodname').keyup(function(){
  var searchvalue = $('#searchprodname').val().toLowerCase();
  searchvalue.trim();
  if (searchvalue != '') {
    $('#prod_list tr').each(function(){
      var textval= $(this).children('.name').text().toLowerCase();
      if(textval.indexOf(searchvalue) != -1){ $(this).show(); }
      else { $(this).hide(); };
    });
  }
  else{ $('#prod_list tr').hide(); }
});

Hvor '#searchprodname' er inputfeltet for søgeteksten, '#prod_list' er tabellen med produkter og '.name' er klassenavn for det td-felt i hver tr som indeholder produktnavnet.

Smider du et svar?
Avatar billede olebole Juniormester
19. marts 2013 - 17:13 #9
Ellers tak, jeg samler ikke point. Du lægger bare selv et svar og accepterer det, så tråden lukkes  =)
Avatar billede heyn Nybegynder
12. april 2013 - 14:38 #10
Et svar
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester



Seneste spørgsmål Seneste aktivitet
I går 23:37 Poe strøm Af lurup i LAN/WAN
I går 14:46 GIF-EDITOR Af snestrup2000 i Billedbehandling
I går 14:03 Logge ind Af Bob i PC
I går 12:12 2 skærme - 1 virker - den anden siger No signal Af eksmojo i Skærme
I går 10:33 openvpn projekt Af dcedata1977 i Windows