Avatar billede odd_ed Nybegynder
26. marts 2003 - 14:45 Der er 8 kommentarer og
1 løsning

Søgning af tekst indeni html

Jeg har brug for at kunne markere fundne ord efter en søgning i en tabel i databasen, som er tekst strippet for html.
Da selve markeringen af de fundne ord foregår i den tekst som skal vises, altså en blanding af tekst og html, har jeg brug for at kunne gå strengen igennem og kun markere ord som ikke er html.
Avatar billede ellebaek Nybegynder
26. marts 2003 - 18:48 #1
Function fncTextChange(strText,str2)
  strTekst = Trim(strText)
  fncTextChange = Replace(fncTextChange,str2,"<b>" & str2 & "</b>")
End Function

Hvad med at gøre det på denne måde...
Så kalder du den med:
<%=fncTextChange(datafelt,ordet)%>
Avatar billede ellebaek Nybegynder
26. marts 2003 - 18:49 #2
og den skal selvfølgelig se sådan her ud:
Function fncTextChange(strText,str2)
  strTekst = Trim(strText)
  fncTextChange = Replace(strText,str2,"<b>" & str2 & "</b>")
End Function
Avatar billede odd_ed Nybegynder
26. marts 2003 - 20:00 #3
Ikke helt!
Hvis jeg f.eks har en tekst med html der ser sådan ud:
"<p><strong>Tarzan is a strong man.</strong></p>"
Og brugeren har søgt på ordet "strong", har jeg brug for en metode der kan markere "ordet" strong, og ikke strong indeni <>. Metoden skal returnere tekststrengen med html indtakt, bare med en markering af det søgte ord.
Avatar billede ellebaek Nybegynder
26. marts 2003 - 20:30 #4
function highlight(myWords,streng)
    if instr(myWords, " ") and left(myWords,1) <> Chr(34) and right(myWords,1) <> Chr(34) then
        myarray = split(myWords, " ")
        for each item in myarray
        streng = replace(streng,item,"<font color=#FFFFFF style=""BACKGROUND-COLOR:#083C73"">" & item & "</font>")
        next
        myarray = ""
    else
        streng = replace(streng,replace(myWords,"""",""),"<font color=#FFFFFF style=""BACKGROUND-COLOR:#083C73"">" & replace(myWords,"""","") & "</font>")
    end if
Response.Write streng
end function


fra: http://www.eksperten.dk/spm/308320
Avatar billede ellebaek Nybegynder
26. marts 2003 - 20:32 #5
og så ændre du bare i dette:
function highlight(myWords,streng)
    if instr(myWords, " ") and left(myWords,1) <> Chr(34) and right(myWords,1) <> Chr(34) then
        myarray = split(myWords, " ")
        for each item in myarray
        streng = replace(streng,item,"<b>" & item & "</b>")
        next
        myarray = ""
    else
        streng = replace(streng,replace(myWords,"""",""),"<b>" & replace(myWords,"""","") & "</b>")
    end if
Response.Write streng
end function
Avatar billede odd_ed Nybegynder
26. marts 2003 - 20:41 #6
Vi nærmer os ;o)
Den markerer bare i ovenstående tilfælde den første forekomst af strong, hvilket er indeni <>.
Avatar billede hnteknik Novice
26. marts 2003 - 22:17 #7
Her kommer noget, der bare virker:

Function RegExpReplace(strInput, strPattern, strReplace)           
' Use <?> to indicate the match you wish to replace             
' Create and setup several variables:                           
Dim regEx, Match, Matches, Position, strReturn                   
Position = 1                                                     
strReturn = ""                                                   
' Set up the regular expression:                                 
Set regEx = New RegExp                                           
regEx.Pattern = strPattern                                       
regEx.IgnoreCase = True                                         
regEx.Global = True                                             

' Get all the matches for it:                                   
Set Matches = regEx.Execute(strInput)                           
' Go through the Matches collection                             
' and build the output string:                                   
For Each Match in Matches                                       
strReturn=strReturn & Mid(strInput, Position,                 
Match.FirstIndex+1-Position)                                       
strReturn=strReturn & Replace(strReplace, "<?>", Match.Value) 
Position = Len(Match.Value) + Match.FirstIndex + 1             
Next                                                             
' Add any text after the last match                             
strReturn = strReturn & Mid(strInput, Position, Len(strInput))   
RegExpReplace = strReturn                                       
End Function   

og så lige kaldet:

strHTML = RegExpReplace(strHTML, "(?![^<]+>)" +
          strSearch + "(?![^<]+>)", strReplace)

strReplace bruger jeg til at fremhæve teksten med rød med blå baggrund.

Henrik
Avatar billede odd_ed Nybegynder
26. marts 2003 - 22:50 #8
KANON ;O)
De gyldne palmer tilfalder h(heldige)n(nørd)teknik
Tak ska du ha
Avatar billede hnteknik Novice
27. marts 2003 - 22:24 #9
Takker

Nød lærer jo som sagt nøgen kvinde at spinne. Det RegExp er sgu da smart. Jeg vil nu ikke tage æren for især den sidste
RegExpReplace(strHTML, "(?![^<]+>)" +
          strSearch + "(?![^<]+>)", strReplace)

men selv en blind høne som mig kan træde i en lort. God fornøjelse
med den.
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
Kurser inden for grundlæggende programmering

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