2012-06-21 4 views
9

ich diese Funktion zu nutzen versuchen Ergebnisse von valueIE8 diese einfache regex parst unterschiedlich von allen anderen Browsern

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

terms; 

Alle anderen Browsern wie Internet Explorer 9 zu schaffen, wird

terms = ["Jim", ""]

produziert jedoch IE8 und wahrscheinlich IE7 erzeugt dies: terms = ["Jim"]

Hat jemand irgendwelche Vorschläge oder Alternativen, die möglicherweise für IE8 funktionieren könnte?

+1

Interessante finden. IE8 verhält sich korrekt, wenn es mit einer Zeichenkette geteilt wird (wie zum Beispiel '", "' in diesem Beispiel), hat aber diese leere Zeichenkette am Ende nicht, wenn es auf eine Regex-Datei aufgeteilt wird ... seltsam. –

+2

Für eine Alternative finden Sie die Antwort auf [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

Können Sie erklären, in welchem ​​Fall Sie sich um leere letzte Element auf Array kümmern? Werfen Sie einen Blick auf meine Bearbeitung – abuduba

Antwort

5

Vielleicht haben Sie besser dran mit dem Gehen:

val.split(',') 

Dies scheint in allen Browsern konsequent zu arbeiten.

Alle nachfolgenden Leerzeichen nach dem Komma müssen noch abgezogen werden. Etwas entlang der Linien von:

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

Offenbar in IE8 und früher mit leeren String Matches durch split() ignoriert werden, wenn ein regulärer Ausdruck Parameter verwendet wird. Ein String-Parameter funktioniert gut:

-1

Sie werden die Regex neu schreiben müssen.

Versuchen Sie es.

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