Avatar billede jimpp Nybegynder
06. januar 2005 - 09:12 Der er 28 kommentarer og
1 løsning

Database udtræk med Jave Script

Okay denne her kan jeg ikke greje ud :)

Jeg har to tabeller hvorfra jeg henter 3 kolonner

rs1("tekst")

rs2("ord") og rs2("betydning")

Den ønskede funktion skal lave et gennemløb af rs1("tekst"), Hvis den støder på et ord der er tilsvarende et felt i rs2("ord"), skal teksten ændres, feks have en kraftigere farve eller være "bold".

Når musen er over ordet skal der komme en lille boks frem ved cursoren med forklaringen i sig.

Er der nogen herinde der har et link til en kilde, eller et bud på hvordan det gøres.

På forhånd tak for hjælpen.
Avatar billede fennec Nybegynder
06. januar 2005 - 09:17 #1
Når du nu skriver JaveScript, er det sår fordi du bruger JScript i ASP i stedet for VBScript??
Avatar billede jimpp Nybegynder
06. januar 2005 - 09:28 #2
Nej, jeg benytter VB :)

Jeg skriver JavaScript fordi jeg gør udfra det er nødvendigt, hvis det skal ske uden at reloade siden hver gang brugeren går over ordet :)
Avatar billede fennec Nybegynder
06. januar 2005 - 09:32 #3
Vi kan jo starte med at ændre farven:

replace(rs1("tekst"),rs2("ord"),"<span style=""color:red"">"& rs2("ord") &"</span>")
Avatar billede fennec Nybegynder
06. januar 2005 - 09:34 #4
... Og med popup forklaring:

replace(rs1("tekst"),rs2("ord"),"<span title=""En forklaring kommer her..."" style=""color:red"">"& rs2("ord") &"</span>")
Avatar billede fennec Nybegynder
06. januar 2005 - 09:40 #5
... Jeg har vist misforstået noget. Der kan være være flere resultater i rs2 ikke. Sådan at den f.eks skal tjekke for "bil", "cykel" osv??

Så skal der nemlig nok laves en funktion til det...

funktion Myreplace(funkText)
dim returVal
  returVal = funkText
  on error resume next
  rs2.MoveFirst
  while not rs2.eof
    returVal = replace(returVal ,rs2("ord"),"<span title="""& rs2("betydning") &""" style=""color:red"">"& rs2("ord") &"</span>")
    rs2.MoveNext
  loop
  on error goto 0
end funktion
Avatar billede jimpp Nybegynder
06. januar 2005 - 10:15 #6
Hmmm virker ikke - det ser sådan ud i min kode

<%
SET rs2  = server.CreateObject("ADODB.RecordSet")
rs2.open "SELECT * FROM ordbog",conn_s,1,3


tekst = replace(RS_opret("tekst"),vbCrLf,"<br>")

  returVal = tekst
  do while not rs2.eof
    returVal = returVal & replace(returVal ,rs2("ord"),"<span title="""& rs2("forklaring") &""" style=""color:red"">"& rs2("ord") &"</span>")
    rs2.MoveNext
  loop


    response.write returVal %>
Avatar billede fennec Nybegynder
06. januar 2005 - 10:29 #7
Du skal lave funktionen Myreplace(), så kalder du bare den når du skal udskrive. Der var foresten en fejl i min funktion. Dette burde virke:

funktion Myreplace(funkText)
dim returVal
  returVal = funkText
  on error resume next
  rs2.MoveFirst
  while not rs2.eof
    returVal = replace(returVal ,rs2("ord"),"<span title="""& rs2("betydning") &""" style=""color:red"">"& rs2("ord") &"</span>")
    rs2.MoveNext
  loop
  on error goto 0
  Myreplace = returVal
end funktion

SET RS_opret = server.CreateObject("ADODB.RecordSet")
RS_opret.open "En eller anden SQL sætning",conn_s,1,3
SET rs2  = server.CreateObject("ADODB.RecordSet")
rs2.open "SELECT * FROM ordbog",conn_s,1,3

do while not RS_opret.eof
  'evt noget andet udskrift også...
  response.write Myreplace(RS_opret("tekst"))
  RS_opret.MoveNext
loop
Avatar billede jimpp Nybegynder
06. januar 2005 - 10:48 #8
Super lig et svar :)
Avatar billede fennec Nybegynder
06. januar 2005 - 10:56 #9
.o) <-- One Eyed Jack
Avatar billede jimpp Nybegynder
06. januar 2005 - 13:30 #10
uh, har lige opdaget et mindre problem ved at bruge titel...

Skal have nogle html tags ind i skidtet i ny og næ :( - fekst br eller a href tags..
Avatar billede fennec Nybegynder
06. januar 2005 - 13:42 #11
Så skal du til at lave noget layer/div i stedet. Dette er kun et forsøg:

returVal = replace(returVal ,rs2("ord"),"<span onMouseOver=""showHide('pop"& rs2("ord") &"');"" onMouseOut=""ShowHide('pop"& rs2("ord") &"');"" style=""color:red""><div id=""pop"& rs2("ord") &""" style=""display:none;"">"& rs2("betydning") &"</div>"& rs2("ord") &"</span>")


<SCRIPT LANGUAGE="JavaScript" TYPE="text/javascript">
<!--
function showHide(funkPop)
{
  if(document.getElementById(funkPop).style.display=='none')
    document.getElementById(funkPop).style.display='block';
  else
    document.getElementById(funkPop).style.display='none';
}
//-->
</SCRIPT>
Avatar billede jimpp Nybegynder
06. januar 2005 - 14:44 #12
Klasse - en sidste lille detalje.

Jeg har et opslag der hedder "NGE" - det betyder at hvis der bliver skriver "Mange" er de tre sidste opslag taget med, løsningen skal kun bruges hvis det er et ord, og ikek en del af et ord.
Avatar billede fennec Nybegynder
06. januar 2005 - 14:53 #13
Ja den er sværre at klare. Der er jo flere måder det ord kan forkomme i teksten.

"Her skal der tjekkes for space før og komma efter NGE, som mange..."
"Her skal der tjekkes for space før og pinktum efter NGE. Mange kan..."
"NGE står her først, og sidst NGE"
"eller i parentes (NGE)"
"Hvad betyder NGE?"
...
...

Der er mange muligheder, så der skal vi vist bruge noget reg exp i stedet. Det er jeg dog først lige begyndt at bruge, så det skal jeg bruge lidt tid til at løse...
Avatar billede tjaz Nybegynder
06. januar 2005 - 15:00 #14
Hvis det kun havde været <br> du skulle have i din title kunne du havde lavet en repace på den med &#10;

Replace(rs2("betydning"), "<br>", "&#10;")
Avatar billede fennec Nybegynder
06. januar 2005 - 15:57 #15
Så er der en ny funktion:

function Myreplace(funkText)
dim returVal, Rx
  returVal = funkText
  Set Rx = New RegExp
  Rx.Global = True
  Rx.IgnoreCase = True
  on error resume next
  rs2.MoveFirst
  do while not rs2.eof
    Rx.Pattern = "([\(\s]*)("& rs2("ord") &")([\)!,.\s]*)"
    strInput = Rx.Replace(returVal, "<span onMouseOver=""showHide('pop$2');"" onMouseOut=""showHide('pop$2');"" style=""color:red""><div id=""pop$2"" style=""border:1px solid black;background-color:white;position:absolute;display:none;"">"& rs2("betydning") &"</div>$2</span>"
    rs2.MoveNext
  loop
  on error goto 0
  Myreplace = returVal
end function
Avatar billede fennec Nybegynder
06. januar 2005 - 16:02 #16
.... Den virker ikke :(
Avatar billede fennec Nybegynder
06. januar 2005 - 16:07 #17
Denne virker måske:

function Myreplace(funkText)
dim returVal, Rx
  returVal = funkText
  Set Rx = New RegExp
  Rx.Global = True
  Rx.IgnoreCase = True
  on error resume next
  rs2.MoveFirst
  do while not rs2.eof
    Rx.Pattern = "([(\s])("& rs2("ord") &")([)?!,.\s])"
    strInput = Rx.Replace(returVal, "$1<span onMouseOver=""showHide('pop$2');"" onMouseOut=""showHide('pop$2');"" style=""color:red""><div id=""pop$2"" style=""border:1px solid black;background-color:white;position:absolute;display:none;"">"& rs2("betydning") &"</div>$2</span>$3")
    rs2.MoveNext
  loop
  on error goto 0
  Myreplace = returVal
end function
Avatar billede jimpp Nybegynder
07. januar 2005 - 00:01 #18
Desværer men jeg kan godt se ideen i det... prøver at rode lidt med det.
Avatar billede jimpp Nybegynder
07. januar 2005 - 18:18 #19
Okay det virker ikke, det er som om den ikke tager ordene med, der sker intet med dem :)
Avatar billede fennec Nybegynder
08. januar 2005 - 13:14 #20
kan du ikke smide hele din kode her ind.
Avatar billede jimpp Nybegynder
10. januar 2005 - 09:59 #21
Beklager mit fravær - uenighed med min udbyder om hvad stabilt net er :)

Det her virker:

SET rs21  = server.CreateObject("ADODB.RecordSet")
rs21.open "SELECT * FROM ordbog",conn_s,1,3


tekst1 = replace(RS_opret1("tekst"),vbCrLf,"<br>")

  returVal_1 = tekst1
  do while not rs21.eof
    returVal_1 = replace(returVal_1 ,rs21("ord"), "<span style=""color:#FF0000;"" onMouseOver=""popup('" & rs21("forklaring") & "')""; onMouseOut=""kill()"">" & rs21("ord") & "</span>")
    rs21.MoveNext
  loop


    response.write returVal_1

%>

Bortset fra at den ikke kan skille ord af "bil" kommer altså med selv om der står blåbil.
Avatar billede fennec Nybegynder
10. januar 2005 - 10:12 #22
Ok, Du kalder recordset'et noget forskelligt hver gang. Så prøv denne:

function Myreplace(funkText, FunkORS)
dim returVal, Rx
  returVal = funkText
  Set Rx = New RegExp
  Rx.Global = True
  Rx.IgnoreCase = True
  on error resume next
  FunkORS.MoveFirst
  do while not FunkORS.eof
    Rx.Pattern = "([(\s])("& FunkORS("ord") &")([)?!,.\s])"
    strInput = Rx.Replace(returVal, "$1<span onMouseOver=""showHide('pop$2');"" onMouseOut=""showHide('pop$2');"" style=""color:red""><div id=""pop$2"" style=""border:1px solid black;background-color:white;position:absolute;display:none;"">"& FunkORS("betydning") &"</div>$2</span>$3")
    FunkORS.MoveNext
  loop
  on error goto 0
  Myreplace = returVal
end function

SET rs21  = server.CreateObject("ADODB.RecordSet")
rs21.open "SELECT * FROM ordbog",conn_s,1,3

  tekst1 = replace(RS_opret1("tekst"),vbCrLf,"<br>")

  returVal_1 = tekst1
  returVal_1 = Myreplace(returVal_1, rs21)
  response.write returVal_1
Avatar billede jimpp Nybegynder
10. januar 2005 - 10:25 #23
Microsoft VBScript compilation error '800a03ea'

Syntax error

/tagwall.asp, line 142

function Myreplace(funkText, FunkORS)
Avatar billede fennec Nybegynder
10. januar 2005 - 10:31 #24
Har du placeret funktionen øverst i din kode?? Den må vist ikke stå i et loop.
Avatar billede jimpp Nybegynder
10. januar 2005 - 10:42 #25
Skummelt:

Wrong number of arguments or invalid property assignment: 'Myreplace'

/tagwall.asp, line 162

161:  returVal_1 = tekst1
162:  returVal_1 = Myreplace(returVal_1, rs21)
163:  response.write returVal_1
Avatar billede fennec Nybegynder
10. januar 2005 - 10:46 #26
Har du fjernet den første funktion, så der ikke ligger 2...
Avatar billede jimpp Nybegynder
10. januar 2005 - 10:48 #27
Jep, all gone... ligger i toppen (næsten) . men uden for looopet
Avatar billede fennec Nybegynder
10. januar 2005 - 11:02 #28
Jeg kan ikke se hvorfor det ikke virker. så det må jeg vist lige teste lidt på....
Avatar billede fennec Nybegynder
10. januar 2005 - 11:32 #29
Skod fejl.....
"strInput" skulle lige udskiftes med "returVal". Også kan vi vist også godt fjerne fejlhåndteringen, så vi kan se hvis der opstår flere fejl :o)

function Myreplace(funkText, FunkORS)
dim returVal, Rx
  returVal = funkText
  Set Rx = New RegExp
  Rx.Global = True
  Rx.IgnoreCase = True
'  on error resume next
  FunkORS.MoveFirst
  do while not FunkORS.eof
    Rx.Pattern = "([(\s])("& FunkORS("ord") &")([)?!,.\s])"
    returVal = Rx.Replace(returVal, "$1<span onMouseOver=""showHide('pop$2');"" onMouseOut=""showHide('pop$2');"" style=""color:red""><div id=""pop$2"" style=""border:1px solid black;background-color:white;position:absolute;display:none;"">"& FunkORS("betydning") &"</div>$2</span>$3")
    FunkORS.MoveNext
  loop
'  on error goto 0
  Myreplace = returVal
end function
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