Avatar billede unknown_someone Juniormester
20. august 2004 - 22:25 Der er 21 kommentarer og
1 løsning

dynamisk replace

Hvis man skal replace i javascript kan man fx skrive sådan;

document.getElementById('str').value.replace(/f/g,"g")

på den måde erstattes f med g. Men hvis f skal komme dynamisk - altså som en streng, hvordan gør jeg så? Har prøvet med fx nedenstående med uden held

tester = 'f';
alert(document.getElementById('str').value.replace(/'+tester+'/g,"g"));

så hvordan gør jeg så?
Avatar billede erikjacobsen Ekspert
20. august 2004 - 22:31 #1
Leg lidt med

tester = 'f';
r = new RegExp(tester,"ig");
alert("Forfatter".replace(r,"g"));
Avatar billede unknown_someone Juniormester
20. august 2004 - 22:39 #2
det så rigtigt ud :)

Men hvad jeg kan ikke helt få det til at funke med en sammensat værdi;

replacetxt = thetext + '$.$' + theprio;
replaceins = new RegExp(replacetxt,"ig");
document.getElementById('str').value = document.getElementById('str').value.replace(replaceins,"d");

?
Avatar billede unknown_someone Juniormester
20. august 2004 - 22:42 #3
det var $-tegnet den ikke kunne lide - så det er løst nu. Perfekt :)

et svar eller?
Avatar billede erikjacobsen Ekspert
20. august 2004 - 22:43 #4
Nej tak, ingen point til mig - jeg samler ikke på dem.
Avatar billede unknown_someone Juniormester
20. august 2004 - 22:44 #5
for hurtig :(

Med

replacetxt = thetext + '*.*' + theprio;
replaceins = new RegExp(replacetxt,"ig");
document.getElementById('str').value = document.getElementById('str').value.replace(replaceins,"d");

nulstiller den hele min "str"?
Avatar billede erikjacobsen Ekspert
20. august 2004 - 22:45 #6
Hvad står der i document.getElementById('str').value ?
Avatar billede unknown_someone Juniormester
20. august 2004 - 22:48 #7
den er dynamisk i forhold til en masse andre funktion - men der kan fx stå;

L*.*2*,*S*.*1
Avatar billede erikjacobsen Ekspert
20. august 2004 - 22:50 #8
Ok, men "*" og "." er magiske tegn i regulære udtryk. Prøv

replacetxt = thetext + '\*\.\*' + theprio;
Avatar billede erikjacobsen Ekspert
20. august 2004 - 22:51 #9
Faktisk:
replacetxt = thetext + '\\*\\.\\*' + theprio;
Avatar billede unknown_someone Juniormester
20. august 2004 - 22:57 #10
perfekt! du ville få et stort kram hvis du sad ved siden af mig!!! :oD

... og var en pige samt så godt ud ;)
Avatar billede erikjacobsen Ekspert
20. august 2004 - 23:02 #11
Jeg opfylder 2 ud af 3, men det er jo ikke nok ;)
Og du tager bare dine point selv.
Avatar billede erikjacobsen Ekspert
20. august 2004 - 23:02 #12
Hov - 1 ud af 3....
Avatar billede erikjacobsen Ekspert
20. august 2004 - 23:04 #13
Forklaringen på '\\*\\.\\*' kan du også få.
Når "*" og "." er magiske tegn, skal man i et regulært udtryk sætte en "\" foran
for at få det ikke at være magisk, men betyde tegnet selv. Men i en JavaScript
streng, kræves der to "\"-ere for at få een.
Avatar billede unknown_someone Juniormester
20. august 2004 - 23:05 #14
Du skal med glæde få point :)

Specielt hvis du kan fixe den sidste for mig ;)

var replacetxt2 = '<a href="java script:void(0)" onclick="changestr(\'' + thetext + '\',\'' + theprio + '\'); return false;" class="infotxtbold">' + thetext + ' (' + theprio + ')</a>';
replaceins2 = new RegExp(replacetxt2,"ig");
document.getElementById('strspan').innerHTML = document.getElementById('strspan').innerHTML.replace(replaceins2,"");
Avatar billede erikjacobsen Ekspert
20. august 2004 - 23:11 #15
Der er mange magiske tegn i den streng. Lad os se:

var replacetxt2 = '<a href="java script:void\(0\)" onclick="changestr\(\\\'' + thetext + '\\\',\\\'' + theprio + '\\\'\); return false;" class="infotxtbold">' + thetext + ' \(' + theprio + '\)</a>';

....tror jeg nok...
Avatar billede erikjacobsen Ekspert
20. august 2004 - 23:12 #16
Ja, og så skal de allesammen være der dobbelt så mange gange...

var replacetxt2 = '<a href="java script:void\\(0\\)" onclick="changestr\\(\\\\\\'' + thetext + '\\\\\\',\\\\\\'' + theprio + '\\\\\\'\\); return false;" class="infotxtbold">' + thetext + ' \\(' + theprio + '\\)</a>';
Avatar billede unknown_someone Juniormester
20. august 2004 - 23:19 #17
need a third try? ;)

Siger at tegnet ";" var ventet. I min editor bliver de 6 \ efter "thetext" og "theprio" røde - hvis det kan hjælpe?
Avatar billede erikjacobsen Ekspert
20. august 2004 - 23:24 #18
Jo, jeg var nok lidt gavmild. Du ved: hvis een vitaminpille er sund, så spis 100.
Men prøv:
var replacetxt2 = '<a href="java script:void\\(0\\)" onclick="changestr\\(\\\\\'' + thetext + '\\\\\',\\\\\'' + theprio + '\\\\\'\\); return false;" class="infotxtbold">' + thetext + ' \\(' + theprio + '\\)</a>';
Avatar billede unknown_someone Juniormester
20. august 2004 - 23:34 #19
nej - desværre :o/
Avatar billede erikjacobsen Ekspert
20. august 2004 - 23:44 #20
Okay, men så bøffer vi lidt flere af de \-ere

var replacetxt2 = '<a href="java script:void\\(0\\)" onclick="changestr\\(\\\'' + thetext + '\\\',\\\'' + theprio + '\\\'\\); return false;" class="infotxtbold">' + thetext + ' \\(' + theprio + '\\)</a>';
Avatar billede unknown_someone Juniormester
20. august 2004 - 23:58 #21
nu tror jeg at jeg har fundet ud af hvad der går galt... når jeg sætter indholdet i min "strspan" så bytter javascriptet om på mine værdier. Fx hedder det ikke <a men <A ligesom class="infotxtbold" kommer til bare at hedde class=infotxtbold

Derfor må jeg bruge alert for at finde frem til hvordan strengen ser ud så jeg ved hvordan replacetxt2 skal bygges op. Vender tilbage senere.
Avatar billede unknown_someone Juniormester
21. august 2004 - 00:24 #22
så blev det klart :)

var replacetxt2 = '<a class=infotxtbold href="java script:void\\(0\\);" onclick="changestr\\(\\\'' + thetext + '\\\',\\\'' + theprio + '\\\'\\); return false;">' + thetext + ' \\(' + theprio + '\\)</a>';

mange tak for hjælpen endnu en gang :)
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