Tôi đang gặp một thời gian khó khăn chuyển đổi một NodeList
để một mảng trong IE 8. Các công trình sau đây một cách hoàn hảo trong Chrome, nhưng trong IE 8 toArray()
không được công nhận là hợp lệ:Chuyển đổi NodeList để mảng
NodeList.prototype.toArray = function() {
var a = [];
for (var i = 0, len = this.length; i < len; i++) {
a[i] = this[i];
}
return a;
}
document.all.tags("div").toArray();
tôi đã thử thêm một hàm nguyên mẫu vào một mảng chỉ để kiểm tra sự tỉnh táo của tôi và nó hoạt động chính xác. Điều đó làm cho tôi nghĩ rằng IE 8 không thực sự trở lại một NodeList
? Dưới đây là ví dụ đầy đủ:
Tôi đang làm gì sai?
Không có tiêu chuẩn hiện hành mà nói rằng 'NodeList' phải là một hàm constructor có thể nhìn thấy và alterable, hoặc nếu có hàm khởi tạo có thể nhìn thấy dưới dạng 'NodeList', nó sẽ được sử dụng làm kiểu trả về của tất cả các phương thức trả về NodeList. (Sau khi tất cả, một NodeList 'childNodes' và một NodeList' getElementsByTagName' làm những việc rất khác nhau.) Prototyping vào các đối tượng JS gốc được xác định bởi tiêu chuẩn ECMAScript và là đáng tin cậy; prototyping vào DOM Nút và các đối tượng khác không được xác định theo tiêu chuẩn ngôn ngữ là không đáng tin cậy và nên tránh. – bobince