Avatar billede heyn Nybegynder
20. marts 2015 - 03:22 Der er 7 kommentarer og
1 løsning

Finde del af streng og lave den bold med jquery

Hej Eksperter

Jeg laver søgning på en del mennesker fra databasen, hvor man kan nøjes med at søge på dele af navnet.
Når så resultatet kommer frem så ønsker jeg at de dele der passer på søgekritetiet skal vises bold i listen af søgeresultater.

Hvis jeg f.eks. søger på 'sa' så skal 'Sa' vises bold i 'Sarah' og 'sa' vises bold i 'Isak'. Altså uden hensyn til store og små bogstaver.

Jeg har aldrig helt fattet det med regexp. Kan man lave et udtryk så 'søgestreng' udskiftes med '<strong>søgestreng</strong>'

Det skal helst være Jquery, men plain JavaScript er også ok.

Venligst Christian
Avatar billede Slater Ekspert
20. marts 2015 - 08:38 #1
var repl = 'med';

var str = 'Hej med dig';

str = str.replace(new RegExp('(med)', 'gi'), '<strong>$1</strong>');

Det vil resultere i "Hej <strong>med</strong dig", og det gælder uanset store og små bogstaver.

Kan du selv finde ud af sætte det ind på siden igen?
Avatar billede Slater Ekspert
20. marts 2015 - 09:59 #2
Hov, jeg glemte at sætte variablen ind, og brugte en hardcodet streng i stedet. Det skal selvfølgelig være:

str = str.replace(new RegExp('('+ repl +')', 'gi'), '<strong>$1</strong>');
Avatar billede keysersoze Guru
20. marts 2015 - 10:10 #3
Og så kunne man overveje om det skulle ske på serveren fremfor i js da det alt andet lige nok vil være hurtigere.
Avatar billede heyn Nybegynder
20. marts 2015 - 13:19 #4
Det fungerer ikke.
Min oprindelige kode er

rowtext = "<tr><td>"+adArr[i]['efternavn']+"</td></tr>";

Den nye kode bliver

rowtext = "<tr><td>"+str.replace(new RegExp('('+adArr[i]['efternavn']+')','gi'),'<strong>$1</strong>')+"</td></tr>";

AdArr[i]['efternavn'] er et efternavn i det array af objekter hvor jeg gemmer søgeresultatet.

Den nye kode fjerner hele efternavn undtaget søgestreng, og den er ikke fremhævet. 'Vis kildekode' viser at <strong> delen ikke kommer med.
med 'er' bliver 'Anders' altså til 'er' i stedet for 'And<strong>er</strong>s'

Årsagen til at det sker på klient, ikke server, er at søgedata skal hentes når 2 søgebogstaver er indtastet. ved 3. 4. ... indtastning skal rækkerne i tabellen bare slettes når de ikke længere lever op til kondition.
Avatar billede heyn Nybegynder
20. marts 2015 - 13:31 #5
Hov en fejl opdaget:

Der skal selvfølgelig stå:

rowtext = "<tr><td>"+adArr[i]['efternavn'].replace(new RegExp('('+$(this).val()+')','gi'),'<strong>$1</strong>')+"</td></tr>";

Hvor $(this).val() er den streng indtastet i søgefeltet.

Men nu vises der slet ingen rækker i tabellen
Avatar billede Slater Ekspert
20. marts 2015 - 14:16 #6
Jeg ved ikke hvorfor den ikke vil, men jeg har lige lavet en test for at forvisse mig at det virker. Kig evt. i kilden her:

http://amunium.dk/showcase/repl.html
Avatar billede heyn Nybegynder
20. marts 2015 - 15:08 #7
Hov - Jeg tømte cashe. Så virkede det!!!

Smid et svar
Avatar billede Slater Ekspert
20. marts 2015 - 15:34 #8
Så gerne.
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

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