2017-10-10 37 views
10

W innym pytaniu pisał to tam:Dlaczego MS Edge nie działa z elementem spread i querySelector?

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

Edge niepowodzeniem z powodu następującego błędu:

function expected

Jednak to działa:

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

Dlaczego nie jest to top jeden pracuje nad Edge (działa w Chrome)?

+1

Czy próbowałeś '[... (document.querySelectorAll ('. Product'))]'? –

+1

Zrobiłem na twoją sugestię, nie działa! – Mouser

+5

Edge może nie zaimplementować protokołu iteratora dla 'NodeList's? * edit: * yep: https://developer.mozilla.org/en-US/docs/Web/API/NodeList#Browser_compatibility (przynajmniej nie obsługuje 'entries()', 'values ​​()', etc , co moim zdaniem byłoby, gdyby poparł protokół iteratora). –

Odpowiedz

7

Można użyć Array.from, który generuje tablicę z obiektu typu tablica.

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

To jest [preferowana składnia] (https://stackoverflow.com/a/40549565/1048572) dla konwersji typów mimo to – Bergi

1

Dobrze wygląda Bergi i Felix są na właściwej drodze: w tym document na MDN mówią o iteratorów.

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

Więc gdzie Array ma entries()nodelist w krawędź nie i nie obsługuje iteracji.

Odpowiedź Niny jest goto!