Chỉ để thêm vào những gì Crescent đã nói,
nếu đó chỉ là một chức năng bạn muốn, bạn có thể thực hiện một số việc như NodeList.prototype.map = Array.prototype.map
Đừng làm điều này! Nó hoàn toàn không đảm bảo hoạt động.
Không có tiêu chuẩn JavaScript hoặc DOM / BOM nào chỉ định rằng hàm NodeList
tạo-hàm thậm chí tồn tại dưới dạng toàn cục / thuộc window
tính hoặc rằng hàm được NodeList
trả về querySelectorAll
sẽ kế thừa từ nó, hoặc nguyên mẫu của nó có thể ghi hoặc hàm Array.prototype.map
sẽ thực sự hoạt động trên NodeList.
Một NodeList được phép là một 'đối tượng máy chủ' (và là một, trong IE và một số trình duyệt cũ hơn). Các Array
phương thức được định nghĩa là được phép hoạt động trên bất kỳ 'đối tượng gốc' nào của JavaScript hiển thị số và length
thuộc tính, nhưng chúng không bắt buộc phải hoạt động trên các đối tượng máy chủ (và trong IE thì không).
Thật khó chịu khi bạn không nhận được tất cả các phương thức mảng trên danh sách DOM (tất cả chúng, không chỉ StaticNodeList), nhưng không có cách nào đáng tin cậy để làm tròn nó. Bạn sẽ phải chuyển đổi mọi danh sách DOM mà bạn nhận được trở lại Mảng theo cách thủ công:
Array.fromList= function(list) {
var array= new Array(list.length);
for (var i= 0, n= list.length; i<n; i++)
array[i]= list[i];
return array;
};
Array.fromList(element.childNodes).forEach(function() {
...
});