2012-06-21 25 views
9

Tôi cố gắng để sử dụng chức năng này để tạo kết quả từ valueIE8 phân tích cú pháp regex đơn giản này khác so với tất cả các trình duyệt khác

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

terms; 

Tất cả các trình duyệt khác như IE9, sẽ sản xuất terms = ["Jim", ""]

Tuy nhiên, IE8 và có thể IE7 tạo ra điều này: terms = ["Jim"]

Có ai có bất kỳ đề xuất hoặc lựa chọn thay thế nào có thể hoạt động cho IE8 không?

+1

Thú vị tìm thấy. IE8 hoạt động đúng khi tách bằng một chuỗi (chẳng hạn như '", "' trong ví dụ này), nhưng không có chuỗi rỗng ở cuối khi tách trên regex ... lạ. –

+2

Đối với một sự thay thế, xem câu trả lời trên [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

Bạn có thể giải thích trong trường hợp nào bạn sẽ lo lắng về phần tử cuối cùng trống trên mảng? Hãy xem bản chỉnh sửa của tôi – abuduba

Trả lời

5

Bạn có thể được tốt hơn off đi với:

val.split(',') 

Điều này dường như làm việc một cách nhất quán trong tất cả các trình duyệt.

Bất kỳ dấu cách trắng nào sau dấu phẩy vẫn phải bị tước đi sau đó. Một cái gì đó dọc theo dòng:

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

Rõ ràng, trong IE8 trở về trước, các trận đấu trắng chuỗi được bỏ qua bởi split() khi một tham số regex được sử dụng. Thông số chuỗi hoạt động tốt:

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

Bạn sẽ phải viết lại regex.

Hãy thử điều này.

String.prototype.trim = String.prototype.trim || function() { 
    return this.replace(/^\s+|\s+$/g, ''); 
} 
function split(str){ 
    return (""+str).trim().split(/\,/); 
} 
Các vấn đề liên quan