2012-01-24 19 views
7

Ho un file JS con un po' di XML in esso, dove si suppone che l'XML per essere convertito in una parola da parte del server.Potete creare una stringa JavaScript senza usare 'o "citazioni?

Eg

var ip = "<lang:cond><lang:when test="$(VAR{'ip_addr'})">$(VAR{'ip_addr'})</lang:when></lang:cond>"; 

questo viene convertito in:

var ip = "192.168.0.0"; 

Tuttavia, nel caso in cui il server non funziona come previsto, non voglio che ci sia un errore di sintassi, e questo è molto importante Attualmente ci sarebbe. essere sintassi erro r perché la lingua usa entrambi i tipi di virgolette. Non riesco a pensare a un modo per aggirare questo, ma forse c'è un altro modo per fare virgolette in JavaScript? O per creare una stringa?

Per esempio, in Python mi piacerebbe usare le virgolette triple:

ip = """<lang:cond><lang:when test="$(VAR{'ip_addr'})">$(VAR{'ip_addr'})</lang:when></lang:cond>""" 

Qualcuno ha un'idea brillante?

+0

Perché non recuperare l'XML separatamente? In questo modo non avresti bisogno di preoccuparti di virgolette. – Tadeck

+0

La stringa non può essere creata senza virgolette. Il modo alternativo per creare una stringa in javascript è var str = new String ("ok"), str ha ora valore "ok". –

+0

@Hera - Le stringhe certamente _can_ possono essere create senza virgolette. 'String.fromCharCode (72,69,76,76,79)' produce la stringa 'HELLO'. (So ​​che questo non è affatto utile in questo caso, ma comunque ...) – nnnnnn

risposta

4

In JavaScript, è possibile uscire da entrambi i tipi di offerta con un \.

Ad esempio:

var str = "This is a string with \"embedded\" quotes."; 
var str2 = 'This is a string with \'embedded\' quotes.'; 

In particolare, il vostro blocco di codice JavaScript dovrebbe essere convertito:

var ip = "<lang:cond><lang:when test=\"$(VAR{'ip_addr'})\">$(VAR{'ip_addr'})</lang:when></lang:cond>"; 

In generale, preferisco sempre per sfuggire alle citazioni, invece di dover cambiare continuamente tipi di virgolette, a seconda del tipo di virgolette utilizzate all'interno.

+0

Credo che questo non risolva il problema dell'OP ... – Tadeck

+0

@Tadeck: certo. – ziesemer

+0

Sì, risolve il problema. – Phrogz

0

Non è possibile creare una stringa senza utilizzare virgolette singole o doppie, poiché anche chiamare direttamente l'oggetto prototipo String() richiede comunque il passaggio della stringa.

XML All'interno si userebbe CDATA, ma dentro JS dovrete sfuggire solo il '\"strings\"'"\'appropriately\'"

+7

Ovviamente puoi creare una stringa senza usare le virgolette. Non sto dicendo che sarebbe utile a questo problema, ma ancora 'String.fromCharCode (72,69,76,76,79)' produce la stringa 'HELLO'. – nnnnnn

+0

Aha, idea fantastica. Ora che parli di quel vettore, scommetto che potresti fare alcune tecniche di offuscamento JavaScript per farlo. – buley

17

ho dovuto creare stringhe senza virgolette per un progetto pure. Stavamo consegnando un client eseguibile javascript al browser per un sito Web interno. L'estremità ricevente striscia le virgolette doppie e singole quando vengono visualizzate. Un modo in cui ho trovato di aggirare le citazioni è dichiarando la mia stringa come un'espressione regolare.

var x = String(/This contains no quotes/); 
x = x.substring(1, x.length-1); 
x; 
+1

Wow. Questo è un trucco pulito. Mi ha aiutato a risolvere un problema in cui dovevo rappresentare "una stringa all'interno di una stringa, all'interno di una stringa, all'interno di una stringa". :) Stavo usando PHP per restituire una stringa JSON (1), che includeva alcuni tag '' HTML (2), uno dei quali doveva includere un attributo 'onclick =" "' (3) che invocava un gestore di metodi JavaScript quello richiedeva un parametro stringa (4). Ero a corto di modi per incorporare le virgolette e tuttavia non rompere il parser JS, quando questo trucco intelligente mi ha dato una terza via che rappresenta tutto. Radicale, amico. Grazie! – elrobis

+0

Grazie! Questo è stato così utile che non puoi nemmeno immaginare. –

3

Utilizzando String prototipo:

String(/This contains no quotes/).substring(1).slice(0,-1) 

Utilizzando String.fromCharCode

String.fromCharCode(72,69,76,76,79) 

generare codici Char per questo:

var s = "This contains no quotes"; 
var result = []; 
for (i=0; i<s.length; i++) 
{ 
    result.push(s.charCodeAt(i)); 
} 
result 
3

Stavo cercando una soluzione allo stesso problema. Qualcuno ha suggerito di guardare https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/template_strings che si è rivelato utile. Dopo aver letto circa la metà dell'articolo, ha dichiarato che è possibile creare stringhe con il carattere di spunta all'indietro.(`)

Prova questa :)

document.getElementById('test').innerHTML = `'|'|'|"|"`
<div id="test" style="font-size:3em;"></div>

Problemi correlati