Câu hỏi Làm cách nào để phân biệt giữa các bộ sưu tập NodeList trực tiếp và không trực tiếp?


Cả document.getElementsByTagName ('div') và document.querySelectorAll ('div') đều trả về bộ sưu tập NodeList. Sự khác biệt duy nhất là phương thức đầu tiên trả về bộ sưu tập trực tiếp và phương thức thứ hai - một phương thức tĩnh.

Câu hỏi đặt ra là - liệu có cơ hội nào để phân biệt một đối tượng với một đối tượng khác chỉ thông qua việc kiểm tra các đối tượng này (tức là - không cố gắng thêm / xóa một số mục để kiểm tra "liveness")?

cảm ơn trước


13
2017-07-26 21:22


gốc




Các câu trả lời:


Các NodeList giao diện là bất khả tri về trạng thái chết hoặc sống của nó.

interface NodeList {
  Node item(in unsigned long index);
  readonly attribute unsigned long length;
};

Nó chỉ chứa một tài sản lengthvà phương pháp item do đó, tôi sợ rằng hiện tại không thể xác định xem một đối tượng có đang hoạt động hay không mà không cần thao tác DOM và nhìn thấy các hiệu ứng.


6
2017-07-27 17:21



Anurag, cảm ơn bạn vì câu trả lời này - shabunc
Bạn được chào đón, và một câu hỏi rất thú vị. Có lý do cụ thể nào khiến bạn muốn kiểm tra liveness của đối tượng? Nếu lý do là tốt và giải quyết vấn đề chính hãng, cũng có thể đề xuất nó cho các tác giả spec tại w3. - Anurag
document.querySelectorAll trả về một StaticNodeList, theo định nghĩa thì không "sống". Bất kể không thể thẩm vấn NodeList, Tôi tự hỏi có an toàn không NodeListtheo quy ước, là luôn luôn trực tiếp. - Crescent Fresh
Vẫn là phiên bản mới nhất trạng thái "Đối tượng NodeList được trả về bởi phương thức querySelectorAll () phải là tĩnh, không tồn tại" - điều này là lạ, vì một NodeList được xác định là trực tiếp. - user123444555621
@Anurag - tốt, thực ra tôi không có lý do thực tế nào, nhưng tôi tin rằng những đặc tính cơ bản như vậy nên có thể kiểm tra - shabunc


a=document.querySelectorAll('a');
b=document.getElementsByTagName('a');

a.toString() == "[object NodeList]"
b.toString() == "[object HTMLCollection]"

(trong FF / Chrome)


6
2018-03-11 05:40



đây là sự trùng hợp, không dứt khoát. document.getElementsByName('link').toString() == "[object NodeList]" và nó đang hoạt động - chiliNUT