2012-01-04 14 views
5

Sto provando a creare una soluzione di template JavaScript super semplice. Voglio utilizzare il metodo JavaScript replace per trovare tutte le istanze di parentesi graffe in un modello e sostituirle con i dati appropriati.Trova e sostituisci con JavaScript

Per esempio, se il mio modello era: <p>My name is {{name}}. I am {{age}}.</p>

vorrei il risultato: <p>My name is Olly. I am 19.</p>

Ecco il mio codice finora: http://jsfiddle.net/2RkAG/

che sto cercando di farlo sostituire automaticamente ogni pezzo di dati, quindi non devo dire esplicitamente al JavaScript cosa sostituire. Tuttavia, questo è dove sto avendo problemi.

risposta

4

$1 funziona solo se si passa direttamente una stringa. Non funziona nel modo in cui lo hai, perché person["$1"] viene valutato prima che la stringa venga passata a .replace - e person["$1"] letteralmente è undefined.

È possibile passare invece una funzione: http://jsfiddle.net/2RkAG/1/. La funzione è chiamata per ogni sostituzione e ha argomenti passati che sono equivalenti ad es. $1.

$result.html(template.replace(/{{(.*?)}}/g, function(a, b) { 
    return person[b]; // a = complete match, b = first group 
})); 

non avete bisogno di sfuggire la prima {, neanche.

+0

Grazie mille. È perfetto. –

+0

Dire, se si desidera utilizzare il modello in questo modo: '

Il mio nome è {{person.name}}. Sono {{person.age}}.

'. Ho questo lavoro con 'eval', ma è questo il modo migliore per farlo? Sicuro? Ad esempio: http://jsfiddle.net/2RkAG/20/ –

+1

@Oliver Joseph Ash: Avresti bisogno di un algoritmo di individuazione dei percorsi se non vuoi 'eval': http://jsfiddle.net/2RkAG/24 . – pimvdb

Problemi correlati