RegExp Replace, $1 durch Funktion umwandeln und dann ersetzen
buchling
- javascript
Ich würde gerne alle Koordinaten in einem bestimment format in eine Ganzzahl umwandeln. Leider hat das mit replace nicht ganz so geklappt wie gewünscht. Irgendwelche Ideen?
function encodeCoord(x, y) {
return (((400-parseFloat(y))*801)+(parseFloat(x)+401));
}
var body = document.getElementsByTagName("body")[0];
body.innerHTML = body.innerHTML.replace(/(\d+)|(\d+)/g, encodeCoord($1, $2));
vielen dank,
Buchling
Hallo,
var body = document.getElementsByTagName("body")[0];
Schreib einfach document.body, das ist kürzer und schneller.
body.innerHTML = body.innerHTML.replace(/(\d+)|(\d+)/g, encodeCoord($1, $2));
Das geht so nicht.
encodeCoord($1, $2) wird nur einmal ausgeführt, und zwar kurz bevor replace einmal aufgerufen wird. $1 und $2 gibt es zu diesem Zeitpunkt nicht, deshalb gibt encodeCoord irgendetwas aus, was dann als String zum Ersetzen aller Treffer verwendet wird.
Siehe auch </archiv/2007/9/t159041/#m1034696>.
Du willst ja für jeden Treffer encodeCoord aufrufen. Das geht anders:
replace(regexp, funktionsobjekt)
also z.B.
replace(/(\d+)|(\d+)/g, encodeCoord)
encodeCoord wird jetzt für jeden Treffer aufgerufen.
encodeCoord erhält drei Parameter, der gesamte Treffer als 1. Parameter, den Teiltreffer der ersten Klammern als zweiten und den Teiltreffer der zweiten Klammer als dritten Parameter. Also nimmst du sie einfach so entgegen:
function encodeCoord (koordinate, x, y) {...}
Ansonsten wie gehabt, du nutzt x und y und gibts einen String zurück.
Mathias
encodeCoord($1, $2) wird nur einmal ausgeführt, und zwar kurz bevor replace einmal aufgerufen wird.
blöde frage - gibts in javascript keine callback-funktionen oder zumindest einen workaround dafür?
encodeCoord($1, $2) wird nur einmal ausgeführt, und zwar kurz bevor replace einmal aufgerufen wird.
blöde frage - gibts in javascript keine callback-funktionen oder zumindest einen workaround dafür?
Das Beispiel von Mathias, ist eine callback Funktion.
Struppi.