Highlight af flere forskellige søgeord ?
Jeg bruger et script til at highlighte mine søgeord med en gul baggrund. Jeg er glad for scriptet idet det ikke er case sentativ, som flere andre scripts er.Ved godt det kan laves lettere med Regular Exp. men kan ikke selv finde ud af det. Scriptet virker fint med et søgeord, men søger jeg på flere ord bliver kun det sidste søgeord markeret.
Jeg kan ikke lige se hvorfor. Kan nogen af jer det ?
strengen der holder mine søgeord hedder "curWord"
Her er koden jeg bruger til udskrivning af resultatet:
If Not (rs.BOF Or rs.EOF) Then
' Hvis der er fundet poster på søgningen
Response.Write "<p>Søgeresultat</p>"
Response.Write "<table border=0>"
Do While Not rs.EOF
databasetekst = RegReplace(rs("article"))
FindStrKeyword = instr(databasetekst, curWord)
hvorersoegeord = (FindStrKeyword-0)
if hvorersoegeord < 1 Then
hvorersoegeord = 1
End If
strOutput = Mid(databasetekst, HvorErSoegeord , (Len(curWord)+200))
'formaterer strengen med highlight af søgeord + ... ved slut
strOutput = strOutput + "<b>...</b>"
strOutput = Highlight(strOutput, curWord, "<Span style='\background-color:#FFFF00;\'>", "</Span>")
'Her udskriver vi vores søgeresultat
Response.Write "<tr><td style='\border-bottom: 1 dotted #000000'\><b>" & rs("Title") & "</b></td></tr>"
Response.Write "<tr><td>" & strOutput & "</td></tr>"
Response.Write "<tr><td><a href=""index.asp?id=" & rs("id") & """( target=""_parent"">Link til siden</a></td></tr>"
rs.MoveNext
Loop
Response.Write "</table>"
...................................................... og Her er highlightfunktionen:
Function Highlight(strText, strFind, strBefore, strAfter)
' Parameters:
' strText - string to search in
' strFind - string to look for
' strBefore - string to insert before the strFind
' strAfter - string to insert after the strFind
Dim nPos
Dim nLen
Dim nLenAll
nLen = Len(strFind)
nLenAll = nLen + Len(strBefore) + Len(strAfter) + 1
Highlight = strText
If nLen > 0 And Len(Highlight) > 0 Then
nPos = InStr(1, Highlight, strFind, 1)
Do While nPos > 0
Highlight = Left(Highlight, nPos - 1) & _
strBefore & Mid(Highlight, nPos, nLen) & strAfter & _
Mid(Highlight, nPos + nLen)
nPos = InStr(nPos + nLenAll, Highlight, strFind, 1)
Loop
End If
End Function
