A node
là tên chung cho bất kỳ loại đối tượng nào trong phân cấp DOM. node
có thể là một trong các phần tử DOM được tích hợp sẵn như document
hoặc document.body
, có thể là thẻ HTML được chỉ định trong HTML chẳng hạn như <input>
hoặc <p>
hoặc nó có thể là nút văn bản được hệ thống tạo của văn bản bên trong phần tử khác. Tóm lại, node
là bất kỳ đối tượng DOM nào.
An element
là một loại cụ thể của node
vì có nhiều loại nút khác (nút văn bản, nút nhận xét, nút tài liệu, v.v ...).
DOM bao gồm một hệ thống phân cấp của các nút nơi mỗi nút có thể có một phụ huynh, một danh sách các nút con và một nextSibling và previousSibling. Cấu trúc đó tạo thành một hệ thống phân cấp giống cây. Nút document
sẽ có danh sách các nút con (nút head
và nút body
). Nút body
sẽ có danh sách các nút con (các phần tử cấp cao nhất trong trang HTML của bạn), v.v.
Vì vậy, một nodeList
chỉ đơn giản là một danh sách giống như mảng của nodes
.
Phần tử là một loại nút cụ thể, có thể được chỉ định trực tiếp trong HTML bằng thẻ HTML và có thể có các thuộc tính như id
hoặc class
. có thể có con, vv ... Có các loại nút khác như nút nhận xét, nút văn bản, v.v ... với các đặc tính khác nhau. Mỗi nút có thuộc tính .nodeType
báo cáo loại nút đó là gì. Bạn có thể xem các loại khác nhau của các nút ở đây (sơ đồ từ MDN):
Bạn có thể thấy một ELEMENT_NODE
là một loại đặc biệt của nút nơi nodeType
tài sản có giá trị của 1
.
Vì vậy, document.getElementById("test")
chỉ có thể trả về một nút và được đảm bảo là một phần tử (một loại nút cụ thể). Bởi vì nó chỉ trả về phần tử chứ không phải là một danh sách.
Vì document.getElementsByClassName("para")
có thể trả về nhiều hơn một đối tượng, nhà thiết kế đã chọn trả về nodeList
vì đó là loại dữ liệu mà họ đã tạo cho danh sách nhiều hơn một nút. Vì chúng chỉ có thể là các phần tử (chỉ có các phần tử thường có tên lớp), về mặt kỹ thuật, nó chỉ có các nút của phần tử kiểu trong đó và các nhà thiết kế có thể tạo một bộ sưu tập có tên khác là elementList
, nhưng họ đã chọn chỉ sử dụng một loại bộ sưu tập cho dù nó chỉ có các phần tử trong đó hay không.
EDIT: HTML5 định nghĩa một HTMLCollection
mà là một danh sách các HTML Elements (không bất kỳ nút, chỉ Elements). Một số thuộc tính hoặc phương thức trong HTML5 hiện trả lại một HTMLCollection
. Mặc dù nó rất giống giao diện với một nodeList
, một sự phân biệt bây giờ được tạo ra ở chỗ nó chỉ chứa các phần tử, không phải bất kỳ loại nút nào.
Sự khác biệt giữa nodeList
và HTMLCollection
ít ảnh hưởng đến cách bạn sử dụng (theo như tôi có thể biết), nhưng các nhà thiết kế HTML5 hiện đã tạo nên sự khác biệt đó.
Ví dụ: thuộc tính element.children
trả về một phần HTMLCollection trực tiếp.
Có 12 loại nút, phần tử là một trong số chúng là – Esailija
không phải tất cả 12 loại này đều là Đối tượng phần tử không? như 1 = ELEMENT_NODE, 3 = TEXT_NODE, tôi nghĩ cả hai đều là đối tượng Element. –
Không, không. Phần tử chỉ là một loại nút duy nhất. – Esailija