Avatar billede i-mox Nybegynder
10. juli 2005 - 13:50 Der er 31 kommentarer og
1 løsning

RegExp til at lægge en onClick til en image tag

Hejsa

Jeg er et kvaj til at bruge RegExp, og nu har jeg fedtet rundt i en times tid uden at nå nogle vegne.

Jeg har lavet et lille CMS system, hvor et billede kan blive indsat med en med en lille krølle på halen inde i src tagget, nemlig zoom=yes. Det skal jeg så finde, og erstatte med en OnClick="[forstør mit billede kode]".

Dette skal jeg gøre for alle img tags, der indeholder zoom=yes i deres src.

Selve strengen der skal ledes igennem kommer fra et recordset, der hedder rsGruppe("tekst").

Er der nogen der kan være så søde at hjælpe mig, inden jeg bliver vanvittig :-)

Dbh.
Mads
Avatar billede thesurfer Nybegynder
10. juli 2005 - 13:53 #1
Kan du ikke bare bruge:

streng = rsGruppe("tekst")
streng = replace(streng, "zoom=yes", "onclick=""[forstør mit billede kode]""")

?

/theSurfer
Avatar billede i-mox Nybegynder
10. juli 2005 - 13:55 #2
Nej, for som det ser ud nu, så vil "zoom=yes" være placeret inde i src="" i image-tagget.

Som fx. her: <IMG src="../services/thumbnail.asp?id=197&amp;size=200&amp;zoom=yes">
Avatar billede i-mox Nybegynder
10. juli 2005 - 13:58 #3
Alternativet er at jeg skal lægge et <a> tag rundt om imagetagget, hvis det gør noget lettere for ekspertene. For jeg er sgu selv blank!
Avatar billede thesurfer Nybegynder
10. juli 2005 - 14:01 #4
Ahh... nu forstår jeg.. :-)

Jeg må indrømme, at RegExp ikke er min stærke side.. (faktisk ikke nogen side..)

Hvis "zoom=yes" altså står sidst i src="...", kan du bruge noget i stil med:

streng = rsGruppe("tekst")
streng = replace(streng, "zoom=yes""", """ onclick=""[forstør mit billede kode]""")


Hvis den løsning ikke kan bruge, skal du nok vente på en RegExp-person :-)

/theSurfer
Avatar billede thesurfer Nybegynder
10. juli 2005 - 14:04 #5
"altså står" = "altid står"

Jeg bliver nød til at smutte.. kigger nok forbi, om et par timer..

Hvis det står sidst i src="...", er det bare at erstatte

zoom=yes"

med

" OnClick="[forstør mit billede kode]"

Dvs: afslut src , og indsæt onclick..

/theSurfer
Avatar billede i-mox Nybegynder
10. juli 2005 - 14:05 #6
Hvor er det vildt!
Det havde jeg overhovedet ikke tænkt på! Det virker!
Tak herfra!

Smider du et svar :-)
Avatar billede thesurfer Nybegynder
10. juli 2005 - 14:07 #7
Det gør jeg da bare :-)

/theSurfer
Avatar billede i-mox Nybegynder
10. juli 2005 - 14:13 #8
Hmm... måske lige et spørgsmål mere :-)

Jeg skal faktisk bruge det billede id i min forstør-billede kode. Hvordan får jeg det ud? Du får point nu, men hvis du har en god idé ville det være sweet - koden ser sådan her ud nu:

<%
streng = rsGruppe("tekst")
actionString = "java script:void(window.open('../services/magnify.asp?id=[HVORDAN FÅR JEG DET HER]','enlarger', 'width=500, height=500, location=no,     menubar=no, resizeable=no, scrollbars=no'))"
streng = replace(streng, "zoom=yes""", """ onclick="""&actionString&"""")

response.write streng%>
Avatar billede thesurfer Nybegynder
10. juli 2005 - 14:18 #9
actionString = "window.open('../services/magnify.asp?id=" & rs("id") & "','enlarger','width=500,height=500,location=no,menubar=no,resizeable=no,scrollbars=no')"

Undgå mellemrum, i parameterne (sidste 'noget her'), da det kan (af en eller anden mærkelig grund) give problemer i visse browsere (kan ikke huske hvilke)..


Der skal ikke bruges "java script:" i onclick.. kun i href="java script:..."

Hvis du bruger f.eks. bruger href="#" og onclick="...", skal du huske "return false" i onclick:

<a href="#" onclick="noget-her;return false"...>noget tekst</a>

Ellers loades "#", som gør at siden hopper til top..

Jeg bliver nød til at smutte nu.. vender tilbage om et par timer.. eller i aften..

- Takker for points.

/theSurfer
Avatar billede i-mox Nybegynder
10. juli 2005 - 14:21 #10
Heysa. Selvtak for points :-)

Din skitserede løsning vil dog ikke virke, da rsGruppe("tekst") indeholder en tekstreng i HTML med mulighed for flere billeder. rs("id") og billedet hænger altså ikke sammen.

Glæder mig til at høre fra dig i aften, hvis det er... Er der evt. andre der har bud :-)
Avatar billede thesurfer Nybegynder
10. juli 2005 - 16:04 #11
Ahh.. dvs, stengen bliver ikke dannet, via en do-loop i asp (f.eks do while not rs.eof)..?

Hvordan dannes img-koden?

/theSurfer
Avatar billede i-mox Nybegynder
10. juli 2005 - 16:31 #12
vha. document.execCommand(InsertImage), som er en del af MS HTML-edit host :-)
Det er derfor jeg er nødt til at parse strengen bagefter...
Avatar billede thesurfer Nybegynder
10. juli 2005 - 16:37 #13
hmm... mere kode, tak :-)
Der må være et sted, hvor vi kan intercepte strengen..

Hvis ikke, må vi ty til JavaScript.. der kan vi også rette det..

Men, jeg kan ikke lige se, det med "id".. hvor kommer id'en frem..?

Er det bare <img src="..." id="noget-her"> ?

Mere kode, tak.

/theSurfer
Avatar billede i-mox Nybegynder
10. juli 2005 - 16:49 #14
OK.

For at danne img tagget bruges følgende funktion:
  function insertImage(){
        if(document.getElementById('myInsertImage').value != 0){
            var msg = "Skal billedet skaleres?"
            if(confirm(msg)){
            scaleTo = (prompt("Indtast den nye bredde til billedet","200"));
            }
            else {var scaleTo = "full"}
            var msg = "Skal billedet kunne forstørres v. museklik?"
            if(confirm(msg)){
            var zoom = "yes"
            }
              theImg = document.getElementById('myInsertImage').value;
              if(zoom = "yes")
              {theImg = "../services/thumbnail.asp?id="+document.all.myInsertImage.value+"&size="+scaleTo+"&zoom=yes";}
              else
              {theImg = "../services/thumbnail.asp?id="+document.all.myInsertImage.value+"&size="+scaleTo+"";}
            edit.focus();
            edit.document.execCommand("InsertImage", false, theImg);
          }
  }

Her får du hele funktionen, men som du ser, så er det afgørende at theImg henviser til src= i img tagget :-)

Selve id kommer fra en DB, med billeder, som en bruger kan uploade, og frit indsætte i en WYSIWYG editor på siden.
Avatar billede thesurfer Nybegynder
10. juli 2005 - 16:55 #15
id'en hentes her: document.all.myInsertImage.value

Der må være et felt (typisk type="textbox"..>), hvori id'en står.. den har id="myInsertImage" i sig..

Du mangler et "=": if(zoom = "yes")
Det skal være: if(zoom == "yes")

PS: "document.all" virker kun i Internet Explorer.. dvs, det er en editor, designet til at virke i IE.. men det kan vel være lige meget, med mindre at dine brugere skal kunne bruge editoren..

/theSurfer
Avatar billede thesurfer Nybegynder
10. juli 2005 - 16:59 #16
Det her giver ingen mening:  theImg = document.getElementById('myInsertImage').value;

theImg bliver overskrevet, inde i IF-ELSE-sætningen..

/theSurfer
Avatar billede i-mox Nybegynder
10. juli 2005 - 17:00 #17
Jeg har som sådan ikke problemer med at generere strengen, og jeg kan sagtens se billedet.

zoom=yes er ikke en tildeling i javascript, men blot lavet for at jeg kan finde ud af hvilke billeder brugeren ønsker der skal kunne zoomes på bagefter. Altså, led efter "zoom=yes", så ved jeg hvilke billeder jeg skal ind og pille ved.

Den løsning du startede med at komme med virker - onClick fungerer upåklageligt, problemet er blot at billedets id, skal medsendes til den ASP site der åbner i et nyt vindue, for at den kan hente billedet, i fuld opløsning fra DB'en.

HTML-edit host er en integreret del af IE 5.0+, så det er derfor jeg er ligeglad med diverse andre browsere. Man kan kun ændre i i IE ;-)
Avatar billede i-mox Nybegynder
10. juli 2005 - 17:01 #18
Nej - den linje kan vist godt fjernes :-) Det er en bøffer.
Avatar billede thesurfer Nybegynder
10. juli 2005 - 17:02 #19
Hvordan ser din OnClick="[forstør mit billede kode]" kode ud?

/theSurfer
Avatar billede i-mox Nybegynder
10. juli 2005 - 17:07 #20
Sådan her:
actionString = "java script:void(window.open('../services/magnify.asp?id=','enlarger', 'width=500, height=500, location=no,     menubar=no, resizeable=no, scrollbars=no'))"
streng = replace(streng, "zoom=yes""", """ onclick="""&actionString&"""")

Det id, som magnify.asp skal bruge er så det samme id, som thumbnail bruger til at generere billedet.
Avatar billede thesurfer Nybegynder
10. juli 2005 - 17:10 #21
Jeg tror at man kan nøjes med disse linier, i din insertImage funktion:

function insertImage()
{
    if (document.getElementById('myInsertImage').value != 0){
        var scaleTo = "full"; // ændres kun, hvis billedet skal skaleres
        var zoom = ""; // ændres kun, hvis der skal zoomes

        var msg = "Skal billedet skaleres?";
        if (confirm(msg)) scaleTo = prompt("Indtast den nye bredde til billedet","200");

        var msg = "Skal billedet kunne forstørres v. museklik?"
        if (confirm(msg)) zoom = "&zoom=yes";

        theImg = "../services/thumbnail.asp?id="+document.getElementById('myInsertImage').value+"&size="+scaleTo+zoom;

        edit.focus();
        edit.document.execCommand("InsertImage", false, theImg);
    }
}


Jeg kigger lige på det andet..

/theSurfer
Avatar billede i-mox Nybegynder
10. juli 2005 - 17:13 #22
Sad også selv lige og kiggede på det. Det er lidt kluntet skrevet :-)

Fedt!! Hvis du kan finde en løsning så må vi lige finde ud af nogen points!
Avatar billede thesurfer Nybegynder
10. juli 2005 - 17:16 #23
Så skal onclick se sådan ud:

onclick="myid=this.src;myid=myid.substring(myid.indexOf('?id=')+'?id='.length);myid=myid.substring(0,myid.indexOf('&')); window.open('../services/magnify.asp?id='+myid,'enlarger','width=500,height=500,location=no,menubar=no,resizeable=no,scrollbars=no')"

/theSurfer
Avatar billede i-mox Nybegynder
10. juli 2005 - 17:18 #24
Hvad er hvad her?

Er det JS oder etwas?
Avatar billede thesurfer Nybegynder
10. juli 2005 - 17:18 #25
..det er 1 linie.. :-)

Den gør det, at den henter det der står i src="...". Så finder den frem til "?id=", og tager den det der står efter det.. indtil den støder på "&"-tegnet.. = id'en :-)

/theSurfer
Avatar billede thesurfer Nybegynder
10. juli 2005 - 17:18 #26
Ja, det er JavaScript..

/theSurfer
Avatar billede thesurfer Nybegynder
10. juli 2005 - 17:20 #27
Funktionen skulle nok ha' set sådan ud:

function insertImage()
{
    if (document.getElementById('myInsertImage').value != 0){
        var scaleTo = "full"; // ændres kun, hvis billedet skal skaleres
        var zoom = ""; // ændres kun, hvis der skal zoomes
        var msg = "";

        msg = "Skal billedet skaleres?";
        if (confirm(msg)) scaleTo = prompt("Indtast den nye bredde til billedet","200");

        msg = "Skal billedet kunne forstørres v. museklik?"
        if (confirm(msg)) zoom = "&zoom=yes";

        theImg = "../services/thumbnail.asp?id="+document.getElementById('myInsertImage').value+"&size="+scaleTo+zoom;

        edit.focus();
        edit.document.execCommand("InsertImage", false, theImg);
    }
}

og måske med "window.confirm" i stedet for bare "confirm"..

/theSurfer
Avatar billede i-mox Nybegynder
10. juli 2005 - 17:21 #28
Det virker sateme!! Nice fucking work!!!

Skal jeg ikke lige oprette et nyt SPM med point til dig?!! :-)
Avatar billede i-mox Nybegynder
10. juli 2005 - 17:23 #29
Kommer her om du vil have dem eller ej!
Du har været en kæmpe stor hjælp!
Avatar billede i-mox Nybegynder
10. juli 2005 - 17:23 #30
Avatar billede thesurfer Nybegynder
10. juli 2005 - 17:26 #31
Det var da så lidt :-)

Ang points-spm:
Husk altid refence/link til det originale spm.. ellers er det ulovlig pointsoverførsel.. men man kan godt finde frem til spm'et, via konto-menuen..

/theSurfer
Avatar billede i-mox Nybegynder
10. juli 2005 - 17:28 #32
OK - det skal jeg huske. Har aldrig prøvet det før, så det er en beginners mistake. Tak for tippet!
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