2010-07-26 31 views
13

Cả hai 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ách 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âu hỏi đặt ra là - liệu có cơ hội 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

Trả lời

6

Giao diện NodeList 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 length, và một phương pháp item vì vậy tôi sợ nó hiện chưa thể xác định nếu một đối tượng là sống mà không cần thao tác DOM và nhìn thấy những ảnh hưởng.

+0

Anurag, cảm ơn bạn cho câu trả lời này – shabunc

+0

Bạn đang 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 khô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

+0

'document.querySelectorAll' trả về một' StaticNodeList', theo định nghĩa không phải là "live". Bất kể không có khả năng thẩm vấn 'NodeList', tôi tự hỏi liệu có an toàn để giả định' NodeList', theo quy ước, là * luôn luôn * sống hay không. –

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

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

(trong FF/Chrome)

+1

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

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