2012-06-21 11 views
9

Sto cercando di utilizzare questa funzione per creare risultati di valueIE8 analizza questa semplice espressione regolare in modo diverso da tutti gli altri browser

function split(val){ 
    return val.split(/,\s*/); 
}; 
value = "Jim, "; 
var terms = split(value); 

terms; 

Tutti gli altri browser, tra cui Internet Explorer 9, produrrà terms = ["Jim", ""]

Tuttavia, IE8 e probabilmente IE7 produce questo: terms = ["Jim"]

Qualcuno ha suggerimenti o alternative che potrebbero funzionare per IE8?

+1

Scoperta interessante. IE8 si comporta correttamente quando si divide con una stringa (come '", "' in questo esempio), ma non ha quella stringa vuota alla fine quando si divide su un'espressione regolare ... strano. –

+2

Per un'alternativa, si veda la risposta su [http://stackoverflow.com/questions/1453521/javascript-split-doesnt-work-in-ie][1] [1]: http://stackoverflow.com/questions/1453521/javascript-split-doesnt-work-in-ie –

+0

Puoi spiegare in che caso ti preoccuperai dell'ultimo elemento vuoto sull'array? Dai un'occhiata alla mia modifica – abuduba

risposta

5

Si potrebbe essere meglio andare con:

val.split(',') 

Questo sembra funzionare in modo coerente in tutti i browser.

Qualsiasi spazio vuoto finale dopo le virgole deve ancora essere rimosso dopo. Qualcosa sulla falsariga di:

for (var i = 0; i < terms.length; i++) { 
    terms[i] = terms[i].replace(/^\s\s*/, '').replace(/\s\s*$/, ''); 
} 

A quanto pare, in IE8 e precedenti, le partite vuoto-stringa vengono ignorati dal split() quando si utilizza un parametro regex. Un parametro stringa funziona correttamente:

'axx'.split('x') // All browsers: ["a", "", ""] 
'axx'.split(/x/) // IE6/7/8: ["a"], all other browsers: ["a", "", ""] 
-1

Dovrai riscrivere la regex.

Prova questo.

String.prototype.trim = String.prototype.trim || function() { 
    return this.replace(/^\s+|\s+$/g, ''); 
} 
function split(str){ 
    return (""+str).trim().split(/\,/); 
} 
Problemi correlati