Avatar billede jaffafo Nybegynder
26. august 2004 - 17:29 Der er 8 kommentarer og
1 løsning

Script søges til at lave links

hej

jeg har følgende script:

    <script type="text/javascript">
      function wrapPostSelection(s1, s2) {
        /*
        * Neither opera nor ns4.08 is supported since
        * they clear the selection when you press a form button!
        */
        if (document.selection) {
          /*
          * Internet Explorer. Tested in 5.0, 5.5 and 6.0
          * Kinda broken... the function works even outside the text box!
          */
          var sT = document.selection.createRange();
          var sTxt = sT.text;
     
          if(sTxt.length == 0)
            return;
     
          sT.text = s1 + sTxt + s2;
     
        } else if (document.getElementsByName) {
          /*
          * Mozilla and relatives support the wonderful HTMLTextAreaElement.selection(Start|End)
          */
          o = document.getElementsByName('indhold')[0];
          if (!isNaN(o.selectionStart)) {
            if (o.selectionStart == o.selectionEnd)
              return;
       
            var text = o.value;
            text = text.substring(0, o.selectionStart)
                + s1
                + text.substring(o.selectionStart, o.selectionEnd)
                + s2
                + text.substr(o.selectionEnd);
           
            o.value = text;
          }
        }
      }
     
      function makeBold() {
        wrapPostSelection('[B]', '[/B]'); 
      }
     
      function makeItalic() {
        wrapPostSelection('[I]', '[/I]'); 
      }
     
      function makeLink() {
        wrapPostSelection('[L]', '[/L]'); 
      }
    </script>


som jeg bruger disse knapper til:

<input type='button' value='Link' onClick="makeLink()">
<input type='button' value='Fed' onClick="makeBold()">
<input type='button' value='Kursiv' onClick="makeItalic()">


Det fungerer fint. Dvs jeg smider feks. [I]balbla[/I] i db'en.. når jeg skal vise teksten erstatter jeg [I] med <i> og [/I] med </i>.

Men når skal lave link:

så laver jeg

[L]http://www.yahoo.com/[/L] om til:

<a href=http://www.yahoo.com/ target=_blank>LINK</a>

men jeg vil gerne kunne lave et følgende link:

<a href=http://www.yahoo.com/ target=_blank>Yahoo</a>

Hvordan gør jeg det?
Avatar billede jaffafo Nybegynder
26. august 2004 - 17:30 #1
[L] erstattes med: "<a href="
[/L] erstattes med " target=_blank>LINK</a>
Avatar billede jaffafo Nybegynder
06. september 2004 - 11:46 #2
Ingen?

jeg kan lige omformulere:

når jeg markerer noget og trykker på Link knappen så smider den

[L] og [/L] rundt om det markede.. f.eks. [L]http://www.yahoo.com[/L]

det smider jeg så i min Database.

Når jeg så skal vise teksten på en side så erstattes:

[L] med "<a href="
[/L] erstattes med " target=_blank>LINK</a>"

dvs at [L]http://www.yahoo.com[/L] bliver til <a href=http://www.yahoo.com/ target=_blank>LINK</a>

men jeg kan ikke bruge det til noget da man ikke kan se hvad "LINK" er for noget.. hvordan kan jeg så gøre?

kan det være noget i den stil:

[L test=Yahoo]http://www.yahoo.com/[/L]

og det skal gerne blive til:

<a href=http://www.yahoo.com/ target=_blank>Yahoo</a>

hjælp??
Avatar billede roenving Novice
07. september 2004 - 01:27 #3
Principielt skal du jo lave det i dit serverside sprog, men hvis du f.eks. bruger en regexp er den stort set det samme, som en lavet i javascript, som ca vil se sådan ud:

var txt = "[L]http://www.yahoo.com[/L]"
var reg = /\[L\]([^\[]*)\[\/L\]/ig;
var nytxt = txt.replace(reg,"<a href='$1' target='_blank'>$1</a>");

alert(nytxt);

-- den er dog ikke bearbejdet for at få et andet ord som linktekst, men kunne f.eks. gøres sådan:

var txt = "[L test=Yahoo]http://www.yahoo.com/[/L]";
var reg = /\[L test=([^\]]*)\]([^\[]*)\[\/L\]/ig;
var nytxt = txt.replace(reg,"<a href='$2' target='_blank'>$1</a>");
alert(nytxt);

-- hvordan det så lige ser ud i det serverside sprog, du bruger er lidt med forskel, men de fleste har metoderne implementeret som native, og ikke som i javascript som metoder ...

Til gengæld er selve RegExp'en meget lidt forskellig !-)
Avatar billede jaffafo Nybegynder
07. september 2004 - 12:07 #4
Jeg skal bruge det i en asp.net (vb.net) side.

det ser meget fornuftigt ud det der. Jeg kan dog ikke lige se hvor $1 får sin værdi fra?.
Avatar billede roenving Novice
07. september 2004 - 12:20 #5
-- det er lavet udfra den, du viste, så i det sidste tilfælde bliver det 'Yahoo' ...

Værdier i paramatrene fås ved at læse i de almindelige paranteser, så i den første læses:

([^\[]*)

-- og i den anden:

([^\]]*) og ([^\[]*)

-- og mht. vb.net er jeg stort set blank, så du får nok bedre hjælp i en af de kategorier, men noget af skelettet vil i VBscript ligne:

Dim Reg
Set Reg = New RegExp
Reg.Global = True
Reg.IgnoreCase = True
Reg.Pattern = "\[L test=([^\]]*)\]([^\[]*)\[\/L\]"

'Og så forsvinder vi forbi det, jeg har set tit, men sådan noget lignende:

NewLinkText = Reg.replace("<a href='\2' target='_blank'>\1</a>",LinkText)
Avatar billede jaffafo Nybegynder
09. september 2004 - 02:18 #6
Hej igen..  jeg takker mange gange, men er det muligt at du kunne ligesom smelte det du har lavet ind i det jeg har postet her?..

jeg er en idiot til javascript :/

det med asp.net (VB), skal jeg nok løse senere selv.. eller få hjælp der fra en eller anden.. :)
Avatar billede jaffafo Nybegynder
16. september 2004 - 17:00 #7
Smid lige et svar..  jeg fandt en anden løsning, men du får points for dine svar :)
Avatar billede roenving Novice
16. september 2004 - 18:39 #8
Oki '-)
Avatar billede roenving Novice
18. september 2004 - 14:25 #9
-- tak for point ;~}
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