2012-06-21 4 views
9

Próbuję użyć tej funkcji do tworzenia wyniki valueIE8 analizuje tę prostą regex odmienny od wszystkich innych przeglądarek

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

terms; 

wszystkich innych przeglądarek tym IE9, będzie produkować terms = ["Jim", ""]

jednak IE8 i prawdopodobnie IE7 produkuje to: terms = ["Jim"]

Czy ktoś ma jakieś sugestie lub alternatywy, które mogłyby ewentualnie pracować dla IE8?

+1

Interesujące znalezisko. IE8 zachowuje się poprawnie podczas dzielenia za pomocą ciągu (np. "", "" W tym przykładzie), ale nie ma tego pustego łańcucha na końcu, gdy podział na wyrażenie regularne ... dziwne. –

+2

alternatywy, patrz odpowiedź na [http://stackoverflow.com/questions/1453521/javascript-split-doesnt-work-in-ie][1] [1]: http://stackoverflow.com/questions/1453521/javascript-split-doesnt-work-in-pl –

+0

Czy możesz wyjaśnić, w którym przypadku będziesz martwić się o pusty ostatni element w tablicy? Zobacz moją edycję – abuduba

Odpowiedz

5

może być lepiej iść z:

val.split(',') 

To wydaje się działać konsekwentnie we wszystkich przeglądarkach.

Wszelkie końcowe spacje po przecinkach muszą zostać później usunięte. Coś wzdłuż linii:

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

Podobno w IE8 i wcześniejszych meczów z pustymi smyczkowe są ignorowane przez split() gdy używany jest parametr regex. Parametr łańcucha działa prawidłowo:

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

Będziesz musiał przerobić wyrażenie regularne.

Spróbuj tego.

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