2017-10-10 20 views
10

Trong một câu hỏi được đăng này đã có:Tại sao MS Edge không hoạt động với phần tử spread và querySelector?

this.products = [...document.querySelectorAll('.product')]; 

Edge sẽ thất bại với các lỗi sau:

function expected

Tuy nhiên điều này đang làm việc:

var params = ['hello', '', 7]; 
var other = [ 1, 2, ...params]; 

Tại sao không phải là hàng đầu một trong những làm việc trên Edge (nó trên Chrome)?

+1

Bạn đã thử '[... (document.querySelectorAll ('. Product'))]'? –

+1

Tôi đã làm theo đề xuất của bạn, không hoạt động! – Mouser

+5

Cạnh có thể không triển khai giao thức lặp cho 'NodeList'? * chỉnh sửa: * yep: https://developer.mozilla.org/en-US/docs/Web/API/NodeList#Browser_compatibility (ít nhất nó không hỗ trợ 'entries()', 'values ​​()', v.v. , tôi tin rằng nó sẽ hỗ trợ giao thức lặp lại). –

Trả lời

7

Bạn có thể sử dụng Array.from, tạo mảng từ một mảng như đối tượng.

this.products = Array.from(document.querySelectorAll('.product')); 
+2

Đó là [cú pháp ưa thích] (https://stackoverflow.com/a/40549565/1048572) cho chuyển đổi loại anyway – Bergi

1

Có vẻ như Bergi và Felix đang đi đúng hướng: trong số này document trên MDN, họ nói về vòng lặp.

Some built-in constructs, such as the spread operator, use the same iteration protocol under the hood:

Vì vậy, nơi Mảng không có entries() một nodelist Edge không và không hỗ trợ lặp.

Câu trả lời của Nina là câu trả lời của goto!

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