2013-04-24 37 views
26

Tôi đã tạo ra sự tương tác này ít cho một trong những nền tảng tại nơi làm việc - http://jsfiddle.net/S79qp/426/Jquery - .forEach() không làm việc trong IE8

Nó hoạt động tốt trên mọi trình duyệt ngoài thành IE8. Khi tôi chạy giao diện điều khiển nó có vẻ là phần này mà nó được gặp vấn đề với ...

Array.prototype.forEach.call(l, function(item) { 
     a.push(jQuery(item).text()); 
    }); 

Ai đó có thể chỉ cho tôi một sự thay thế thân thiện với IE8 để tôi có thể làm cho nó tương thích với các phiên bản yêu cầu?

+1

tại sao bạn không sử dụng jQuery thay vì nguyên mẫu –

+2

@Sarfaraz: 'nguyên mẫu' trong trường hợp này không phải là thư viện, mà là từ khóa trong Javascript. – Guffa

+1

@ Sarfaraz Ngoài ra còn có vấn đề gì khi sử dụng nguyên mẫu? – rickyduck

Trả lời

35

Sử dụng jQuery.each method:

jQuery.each(l, function(index, item){ 
    a.push(jQuery(item).text()); 
}); 

Nếu mảng mục tiêu là có sản phẩm nào từ khi bắt đầu, bạn có thể sử dụng jQuery.map method cho thay này:

var a = jQuery.map(l, function(item){ 
    return jQuery(item).text(); 
}); 
+0

Bây giờ giao diện điều khiển nói rằng nó không hỗ trợ index = a.indexOf (current) + 1; nếu (chỉ mục <0 || chỉ mục> = l.length) { chỉ mục = 0; @Guffa } –

+0

@ Milo-J: 'Array.indexOf' là phương pháp khác được thêm gần đây. Sử dụng phương thức 'jQuery.inArray' để thay thế. http://api.jquery.com/jQuery.inArray/ – Guffa

+0

Tôi đã cố gắng làm điều đó nhưng nó sẽ không hoạt động. bạn có thể vui lòng xem không? http://jsfiddle.net/S79qp/428/ @Guffa –

2

Trên thực tế phương pháp foreach chỉ có sẵn từ IE9. Bạn nên sử dụng phiên bản jQuery "each()" để cung cấp hỗ trợ cho các trình duyệt cũ hơn.

41

Nếu tất cả các bạn muốn là forEach() trong IE8:

if (typeof Array.prototype.forEach != 'function') { 
    Array.prototype.forEach = function(callback){ 
     for (var i = 0; i < this.length; i++){ 
     callback.apply(this, [this[i], i, this]); 
     } 
    }; 
} 

này sẽ cư xử as expected trong bất kỳ trình duyệt mà không có nó built-in.

+3

Up bình chọn này như khi nói đến một dự án quy mô lớn, một số lần dễ dàng hơn và an toàn hơn để giúp sửa trình duyệt bị lỗi thay vì cố sửa mã không thực sự bị lỗi – Mayhem

+1

Điều này thật tuyệt vời! – Anant

+0

Sẽ tốt hơn nếu sử dụng polyfill tại liên kết được cung cấp. Mã đó đã được hoàn thiện. –

2

foreach không được hỗ trợ trong IE 8, thay vào đó bạn có thể sử dụng một vòng lặp thường xuyên:

for (var i = 0; i < myArray.length; i++) { 
    // code 
} 
1

tôi đã cùng một vấn đề với IE8 và đây là cách tôi giải quyết nó!

Trước hết, muốn lặp lại và nhận dữ liệu từ mảng JSON đối tượng. Hãy nhìn của ban đầu đang làm việc tốt trong FIREX, chrome và IE mới nhất nhưng không IE8

  data.children.forEach(function(item) { 
 
       //javascript: console.log(item); 
 
       console.log(data.children); 
 
       attachRel(item, '1' + (data.children.length > 1 ? 1 : 0)); 
 
      });

Dưới đây là giải pháp mà tôi đã phát triển sau một ngày dài của cuộc đấu tranh

  $.each(data.children, function() { 
 

 
       attachRel(this, '1' + (data.children.length > 1 ? 1 : 0)); 
 
      });

Các vấn đề liên quan