Avatar billede robson Nybegynder
10. april 2003 - 15:59 Der er 8 kommentarer og
1 løsning

Markering af ord UDEN om html tags

Jeg har en lang tekst, der er kryderet godt med html tags!

Jeg foretager nu en søgning i denne tekst - når teksten så vises, vil jeg have at de ord der matcher søgningen er markeret med en ny baggrundsfarve.

Det er dog vigtigt at søgningen IKKE finder frem til ord i html tags'ene, hvilket vil give en ret uheldig effekt :(

Er der en der har en sådan funktion liggende...  :o)  ??
Avatar billede Slettet bruger
10. april 2003 - 16:32 #1
<script language="javascript">
"/[^<>]+|<.*?>/"
str = "For more <i>informatio ma n</i>, masee maChapter 3.4.5.1";
re = /[^<>]+|<.*?>/gi;
found = str.match(re);
var newstr = "";
searchword = "ma"
var searchregexp = new RegExp(searchword ,"gi");
for(i=0;found[i];i++)
{
    if(found[i][0]!="<")
    {
       
        document.write(found[i].replace(searchregexp, "<b>" + searchword + "</b>"));
    }
    else
    {
        document.write(found[i]);
    }
}
</script>
Avatar billede robson Nybegynder
10. april 2003 - 17:04 #2
hmmm.... det ser spændende ud, men den kræver lige lidt forklaring!!!

jeg har forsøgt at sætte dit script ind og det kører... MEN hvis jeg sætter searchword = "i" så bliver <i> også markeret - hvilket jeg netop ville undgå!

Jeg har også lidt problemer med at omdifinerer str. Jeg forestiller mig at sætte str = document.body.innerHTML - men det giver problemer. Er det ikke måden at gøre det på???
Avatar billede Slettet bruger
10. april 2003 - 17:19 #3
Min fejl! Lidt kommentarer!

<script language="javascript">
str = "For more <i>informatio ma n</i>, masee maChapter 3.4.5.1";
re = /[^<>]+|<.*?>/gi;
found = str.match(re);//array af alt der enten er indhold af tag fra < til >
//eller ikke indhold af tag...
var newstr = "";
searchword = "i" //søge ordet
//searchregexp: Finder alle hændelser af searchword
var searchregexp = new RegExp(searchword ,"gi");
for(i=0;found[i];i++)
{
        //Hvis den først karakter ikke er "<" (start på tag)
    if(found[i].charAt(0)!="<")
    {
        document.write(found[i].replace(searchregexp, "<b>" + searchword + "</b>")); //Markerer søgeordet
    }
    else
    {
                //Markerer ikke søgeordet
        document.write(found[i]);
    }
}
</script>
Avatar billede robson Nybegynder
10. april 2003 - 17:41 #4
kan du give en kort forklaring på

re = /[^<>]+|<.*?>/gi;

og

var searchregexp = new RegExp(searchword ,"gi");
Avatar billede Slettet bruger
10. april 2003 - 20:19 #5
Håber det er til at forstå!?

re = /[^<>]+|<.*?>/gi;
"[^<>]+" - alle karakterer undtagen "<" og ">" en eller flere gange
| eller
<.*?> - < [ikke ny linie][alle karakterer 0 eller flere gange]>
gi søg på alle matches, ignorer CASE

RegExp(searchword ,"gi"); <--- opretter RegExp på mønstret searchword, "gi" betyder det samme som ovenover!
Avatar billede robson Nybegynder
11. april 2003 - 08:38 #6
Syntaksen er lidt langhåret... men fin beskrivelse - tak :o)

Jeg forestiller mig nu at sætte str = document.body.innerHTML
...men det får jeg fejl på... hvad gør jeg galt???
Avatar billede robson Nybegynder
11. april 2003 - 08:54 #7
Kan jeg overhovedet det jeg har gang i her....

Jeg vil lægge koden fra regin i en function HighlightText() som jeg så vil kalde fra body - onLoad="HighlightText()"... siden skal herefter viser normalt incl. diverse highlights....

hmmmm... HJÆLP
Avatar billede Slettet bruger
11. april 2003 - 13:23 #8
Nedenstående virker fint for mig... men du skal nok sikre dig på en eller anden måde highlight ikke går ind i mellem <script> og </script>

<html>
<head>
<title>btwtag</title>
<script language="javascript">
str = "For more <i>informatio ma n</i>, masee maChapter 3.4.5.1";
function highlight(str)
{
    re = /[^<>]+|<.*?>/gi;
    found = str.match(re);
    var newstr = "";
    searchword = "i"
    var searchregexp = new RegExp(searchword ,"gi");
    var newstr="";
    for(i=0;found[i];i++)
    {
        if(found[i].charAt(0)!="<")
        {       
            newstr += found[i].replace(searchregexp, "<b>" + searchword + "</b>");
        }
        else
        {
            newstr += found[i];
        }
    }
    return newstr;
}
</script>
</head>
<body>
<input type="button" name="markup" value="markup" onclick="document.body.innerHTML=highlight(document.body.innerHTML);"/>
<i>fasdjlæeuyiowe</i> dfasjkl asdfn,sfasdiopd ewruop asdfåø isdf
afsdnm,. dfsalææl <i> sfad asfafsddlæ </i>fasdweriop
</body>
</html>
Avatar billede robson Nybegynder
11. april 2003 - 13:30 #9
Kanon - jeg har testet lidt videre og har fået noget til at virke i javascript ud fra din kode!!! :o)

samtidig lykkes det mig at lave en tilsvarende funktion i ASP ud fra http://www.eksperten.dk/spm/333647 (hnteknik's indlæg)

Tak for hjælpen  ;)
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