[JavaScript] Probleem met quotes :(

Pagina: 1
Acties:

  • Nutcaze
  • Registratie: Oktober 1999
  • Laatst online: 24-07 10:48
Ik heb het volgende stukje code:
code:
1
2
3
4
5
6
7
8
function replaceString(oldS,newS,fullS) {
    // Replaces oldS with newS in the string fullS
    for (i=0;i<fullS.length;i++) {
        if (fullS.substring(i,i+oldS.length) == oldS)
            fullS = fullS.substring(0,i) + newS + fullS.substring(i+oldS.length,fullS.length);
    }
    return fullS;
}

Staat erbij wat het doet dus lijkt me duidelijk en hij werkt ook goed. Maar nou heb ik 1 probleem:
Bij het volgende stukje code loopt het mis
code:
1
2
3
naam = 'test \'test\'';
nieuwenaam = replaceString('\'','',naam);
document.write('<a href=\"test.asp\" onMouseOver=\"self.status=\'' + nieuwenaam + '\';return true;\" onMouseOut=\"self.status=\'\';\">' + naam + '</a>');

Ik heb hier als invoer de variabele test.
Deze naam wil ik in de status balk laten zien maar dan dus zonder de backslash(\). Wat moet ik in gosnaam als tweede parameter invullen in die functie? Ik heb al van alles geprobeerd. Alerten geeft ie wel het gewenste resultaat. Ik begrijp er helemaal niets meer van.

Not all chemicals are bad. Without hydrogen or oxygen, for example, there would be no way to make water, a vital ingredient in beer.


  • Yo-L
  • Registratie: December 2000
  • Niet online
Je probleem hier is nogal onduidelijk, als ik je code probeer, komt er een link "test 'test'" te staan, en met de mouseOver krijg ik "test test" in de de statusbalk te zien.. Met een alert krijg ik hetzelfde resultaat ("test test") dus..

Moeten er aanhalingstekens omheen ofzo? Leg eens uit...

  • RM-rf
  • Registratie: September 2000
  • Laatst online: 11:53

RM-rf

1 2 3 4 5 7 6 8 9

Op vrijdag 14 september 2001 21:01 schreef Nutcaze het volgende:
code:
1
2
3
4
naam = 'test \'test\'';
nieuwenaam = replaceString('\'','',naam);
document.write('<a href=\"test.asp\" onMouseOver=\"self.status=\''+nieuwenaam+'\';return true;\" ");
document.write(" onMouseOut=\"self.status=\'\';\">' + naam + '</a>');
je vergeet hier even het principe van escapen van speciale tekens;
omdat je strings altijd omvat door dubbelle of enkele quotes kun je, om alsnog dubbelle of enkele quotes te kunnen gebruiken deze escapen, ook de backslash kun/moet je escapen (dus dubbel \\)

de backslash is enkel om een string aan te maken, opgeslagen wordt de unescapede variant:

var foo = "\"bar\""
slaat als waarde van foo op : "bar" dus mét quotes maar zonder slashes;
dat heet escapen, je kunt altijd unescape() doen om een dubbel escapede string te strippen van slashes

je probleem los je gewoon op door dubbel te escapen; dus
code:
1
naam = 'test \\\'test\\\'';

Intelligente mensen zoeken in tijden van crisis naar oplossingen, Idioten zoeken dan schuldigen


  • Nutcaze
  • Registratie: Oktober 1999
  • Laatst online: 24-07 10:48
Ik weet alles over de escape tekens maar toch krijg ik het niet voor elkaar. Probeer het maar eens werkend te krijgen.

In de statusbalk moet dus test 'test' komen te staan (in dit geval).

Not all chemicals are bad. Without hydrogen or oxygen, for example, there would be no way to make water, a vital ingredient in beer.


  • RM-rf
  • Registratie: September 2000
  • Laatst online: 11:53

RM-rf

1 2 3 4 5 7 6 8 9

code:
1
2
3
naam = 'test \\\'test\\\'';
document.write('<a href=\"test.asp\" onMouseOver=\"self.status=\'' + naam + '\';return true;\" ");
document.write("onMouseOut=\"self.status=\'\';\">' + unescape(naam) + '</a>');

zou gewoon moeten werken

Intelligente mensen zoeken in tijden van crisis naar oplossingen, Idioten zoeken dan schuldigen