Bộ sưu tập HTML là gì?

Trả về phần tử tại vị trí đã chỉ định trong bộ sưu tập. Bạn cũng có thể chỉ định vị trí trong dấu ngoặc mảng thay vì gọi phương thức này một cách rõ ràng

namedItem( )

Trả về phần tử từ bộ sưu tập có giá trị được chỉ định cho thuộc tính id hoặc name của nó hoặc null nếu không có phần tử nào như vậy. Bạn cũng có thể đặt tên phần tử trong dấu ngoặc mảng thay vì gọi phương thức này một cách rõ ràng

Sự miêu tả

Một HTMLCollection là một tập hợp các phần tử HTML với các phương thức cho phép bạn truy xuất các phần tử theo vị trí của chúng trong tài liệu hoặc theo thuộc tính id hoặc name của chúng. Trong JavaScript, các đối tượng HTMLCollection hoạt động giống như các mảng chỉ đọc và bạn có thể sử dụng ký hiệu dấu ngoặc vuông JavaScript để lập chỉ mục một HTMLCollection theo số hoặc theo tên thay vì gọi các phương thức item( )namedItem( )

Một số thuộc tính của giao diện HTMLDocument (tiêu chuẩn hóa đối tượng Tài liệu DOM Cấp 0) là các đối tượng HTMLCollection, cung cấp quyền truy cập thuận tiện vào các thành phần tài liệu như biểu mẫu, hình ảnh và liên kết. Đối tượng HTMLCollection cũng cung cấp một cách thuận tiện để duyệt qua các phần tử của biểu mẫu HTML, các hàng của bảng HTML, các ô của một hàng trong bảng và các khu vực của bản đồ hình ảnh phía máy khách

Giao diện HTMLCollection đại diện cho một tập hợp chung (đối tượng giống như mảng tương tự như arguments) của các phần tử (theo thứ tự tài liệu) và cung cấp các phương thức và thuộc tính để chọn từ danh sách

Ghi chú. Giao diện này được gọi là HTMLCollection vì các lý do lịch sử (trước DOM hiện đại, các bộ sưu tập triển khai giao diện này chỉ có thể có các phần tử HTML làm mục của chúng)

Một HTMLCollection trong HTML DOM đang hoạt động;

Của cải

HTMLCollection.length Chỉ đọc Trả về số mục trong bộ sưu tập.

phương pháp

HTMLCollection.item()Trả lại nút cụ thể tại index dựa trên số 0 đã cho vào danh sách. Trả về null nếu index nằm ngoài phạm vi. HTMLCollection0Trả về nút cụ thể có ID hoặc tên dự phòng khớp với chuỗi được chỉ định bởi HTMLCollection1. So khớp theo tên chỉ được thực hiện như là phương sách cuối cùng, chỉ trong HTML và chỉ khi phần tử được tham chiếu hỗ trợ thuộc tính HTMLCollection1. Trả về null nếu không có nút nào tồn tại theo tên đã cho

Cách sử dụng trong JavaScript

HTMLCollection cũng hiển thị trực tiếp các thành viên của mình dưới dạng thuộc tính theo cả tên và chỉ mục. ID HTML có thể chứa HTMLCollection5 và HTMLCollection6 dưới dạng các ký tự hợp lệ, điều này sẽ bắt buộc phải sử dụng ký hiệu ngoặc để truy cập thuộc tính. Hiện tại, HTMLCollections không nhận ra ID hoàn toàn là số, điều này sẽ gây ra xung đột với quyền truy cập kiểu mảng, mặc dù HTML5 cho phép những ID này

Ví dụ: giả sử có một phần tử HTMLCollection7 trong tài liệu và phần tử HTMLCollection8 của nó là HTMLCollection9

var elem1, elem2;

// document.forms is an HTMLCollection

elem1 = document.forms[0];
elem2 = document.forms.item(0);

alert(elem1 === elem2); // shows: "true"

elem1 = document.forms.myForm;
elem2 = document.forms.namedItem("myForm");

alert(elem1 === elem2); // shows: "true"

elem1 = document.forms["named.item.with.periods"];

thông số kỹ thuật

Thông số kỹ thuậtStatusNhận xét Mức sống   Lỗi thời   ObsoleteInitial definition.

Tính tương thích của trình duyệt web

Bảng tương thích trên trang này được tạo từ dữ liệu có cấu trúc. Nếu bạn muốn đóng góp cho dữ liệu, vui lòng xem https. //github. com/mdn/browser-compat-data và gửi yêu cầu kéo cho chúng tôi

Một HTMLCollection là một danh sách các nút. Một nút riêng lẻ có thể được truy cập bằng chỉ mục thứ tự hoặc các thuộc tínhname hoặc id của nút. Ghi chú. Các bộ sưu tập trong HTML DOM được giả định là đang hoạt động, nghĩa là chúng được cập nhật tự động khi tài liệu cơ bản bị thay đổi

Xem thêm Đặc tả Mô hình Đối tượng Tài liệu (DOM) Cấp 2

Phương thức item() được sử dụng để trả về nội dung của phần tử tại chỉ mục đã cho của tập hợp tất cả các phần tử HTML. Chỉ số bắt đầu từ số không (0). Các phần tử trong bộ sưu tập được sắp xếp theo thứ tự khi chúng xuất hiện trong mã nguồn.  

cú pháp

HTMLCollection.item(index) 

HOẶC LÀ

HTMLCollection[index] 

Thông số. Nó chứa một số đại diện cho chỉ mục của phần tử mà người dùng muốn trả về. Chỉ số bắt đầu từ 0

Đối tượng NodeList là tập hợp các nút tài liệu (nút phần tử, nút thuộc tính và nút văn bản)

1. Các phương thức trả về HTMLCollection và NodeList

Bộ sưu tập HTML

Hai phương thức này trả về đối tượng HTMLCollection

  1. getElementsByTagName() và
  2. getElementsByClassName()

Danh sách nút

Các phương thức trả về NodeList là

  1. getElementsByName()
  2. truy vấnSelectorAll()

dùng thử

Xem Phương thức Pen 1 trả về HTMLCollection & NodeList của SoftAuthor (@softauthor) trên CodePen

2. HTMLCollection (Nút phần tử) so với NodeList (Tất cả nút)

HTMLCollection only contains element nodes such as

, , etc.

NodeList chứa các nút phần tử, nút thuộc tính, nút văn bản, v.v.

Đó là loại khó hiểu .. đúng

Hãy xem xét điều này với một ví dụ mã

Đây là đánh dấu HTML đơn giản

Nó có một div với id được gọi là box-wrapper là phần tử cha

Phần tử cha có một nút văn bản và hai nút phần tử

I'm Text Node
I'm Element Node 1
I'm Element Node 2

Hãy xem làm thế nào để có được những đứa trẻ của nó

Để chỉ nhận các nút phần tử, hãy sử dụng. thuộc tính con trên đối tượng tài liệu gốc

Trong trường hợp này. hộp

Các. thuộc tính con trả về HTMLCollection chỉ chứa các nút phần tử

Trong trường hợp này [div, div] nhưng nó bỏ qua dòng chữ “I’m Text Node”

const box = document.getElementById("box");

// console.log(box.children); // HTMLCollection(2) [div, div]
// console.log(box.childNodes); // NodeList(5) [text, div, text, div, text]

Mặt khác, các. Thuộc tính childNodes trên đối tượng tài liệu gốc trả về NodeList chứa các nút phần tử, nút thuộc tính, nút văn bản, v.v.

dùng thử

Xem Bộ sưu tập Pen HTML (Nút phần tử) so với NodeList (Tất cả nút) của SoftAuthor (@softauthor) trên CodePen

3. HTMLCollection (tên, id hoặc số chỉ mục) Vs NodeList (chỉ chỉ mục)

Các mục HTMLCollection có thể được truy cập bằng thuộc tính tên, thuộc tính id hoặc số chỉ mục của chúng

Các mục NodeList chỉ có thể được truy cập bằng số chỉ mục của chúng

Bộ sưu tập HTML

Trong ví dụ mã bên dưới, hãy lấy phần tử div con đầu tiên bên trong phần tử cha của trình bao bọc hộp

box 1
box 2
box 3
box 4

Để làm điều đó, hãy chuyển đổi phần tử con của phần tử cha trình bao bọc hộp thành HTMLCollection bằng thuộc tính con

Sử dụng thuộc tính số chỉ mục, id hoặc tên để lấy một mục cụ thể từ HTMLCollection bằng phương thức nameItem()

const boxWrapper = document.getElementById('box-wrapper');
const boxes = boxWrapper.children; // HTMLCollection

console.log(boxes[0]); // Using Index WORKS!
console.log(boxes.namedItem("id-box1")); // Using ID WORKS!
console.log(boxes.namedItem("nm-box1")); // Using Name WORKS!
console.log(boxes.namedItem("cls-box1")); // Using Class NULL

Danh sách nút

Chuyển đổi phần tử con của phần tử cha của trình bao bọc hộp thành NodeList bằng cách sử dụng. tài sản conNodes

Khi sử dụng NodeList, bạn chỉ có thể lấy một mục cụ thể bằng cách sử dụng vị trí chỉ mục của nó

const boxWrapper = document.getElementById('box-wrapper');
const boxes = boxWrapper.childNodes; // NodeList

console.log(boxes[0]); // Using Index WORKS!
console.log(boxes.namedItem("id-box1")); // Using ID ERROR!
console.log(boxes.namedItem("nm-box1")); // Using Name ERROR!
console.log(boxes.namedItem("cls-box1")); // Using Class ERROR!

dùng thử

Xem Bộ sưu tập Pen HTML (Tên, Id và Chỉ mục) so với NodeList (Chỉ mục) của SoftAuthor (@softauthor) trên CodePen

4. HTMLCollection (trực tiếp*) Vs NodeList (tĩnh*)

Bộ sưu tập HTML

getElementsByTagName() và getElementsByClassName() đang hoạt động

Khi một tài liệu cơ bản được thay đổi, HTMLCollection sẽ được cập nhật tự động

Hãy xem điều đó trong hành động

Tôi có một phần tử div đơn giản với id box-wrapper và nó có 4 phần tử div con bên trong

Hãy thêm một phần tử vào nó

________số 8_______

Đầu tiên, lấy tất cả các phần tử div có. box trong đó bằng cách sử dụng getElementsByClassName() trả về HTMLCollection

Ở giai đoạn này, HTMLCollection có 4 mục trong đó

Sau đó, thêm một phần tử div mới với tên lớp. hộp cho nó

Bây giờ, HTMLCollection có năm mục trong đó

const boxWrapper = document.getElementById("box-wrapper");

const boxes = boxWrapper.getElementsByClassName("box");
console.log(boxes.length); // 4

const div = document.createElement("div");
div.classList.add("box");
div.innerHTML = "box 5";
boxWrapper.appendChild(div);

console.log(boxes.length); // 5

Tương tự, phương thức getElementsByTagName() sẽ tự động trả về HTMLCollection đã cập nhật khi có thay đổi trong danh sách

Có một ngoại lệ. Mặc dù, getElementsByName() trả về NodeList – nhưng nó TRỰC TIẾP

Danh sách nút

NodeList được trả về bởi querySelectorAll() KHÔNG hoạt động

Khi có thay đổi đối với tài liệu cơ bản, nó không tự động cập nhật NodeList

Thay vào đó, nó sẽ tạo một bản sao của NodeList với một phần tử mới

Để có được NodeList cập nhật, bạn sẽ phải gọi lại phương thức querySelectorAll()

const boxes = document.querySelectorAll(".box");
console.log(boxes.length); // 4

const div = document.createElement("div");
div.setAttribute("class", "box");
div.innerHTML = "box 5";
boxWrapper.appendChild(div);

console.log(boxes.length); // 4
console.log(document.querySelectorAll(".box").length); // 5

dùng thử

Xem Pen HTMLCollection (trực tiếp) Vs NodeList (tĩnh) của SoftAuthor (@softauthor) trên CodePen

5. Bộ sưu tập HTML (đối với. của) Vs NodeList (forEach)

Tất cả các phiên bản gần đây của các trình duyệt hiện đại (Safari, Firefox, Chrome, Edge) đều hỗ trợ lặp lại

const box = document.getElementById("box");

// console.log(box.children); // HTMLCollection(2) [div, div]
// console.log(box.childNodes); // NodeList(5) [text, div, text, div, text]
2 trên danh sách DOM chẳng hạn như
const box = document.getElementById("box");

// console.log(box.children); // HTMLCollection(2) [div, div]
// console.log(box.childNodes); // NodeList(5) [text, div, text, div, text]
3 hoặc
const box = document.getElementById("box");

// console.log(box.children); // HTMLCollection(2) [div, div]
// console.log(box.childNodes); // NodeList(5) [text, div, text, div, text]
4

HTMLCollection trực tiếp là gì?

Trực tiếp là. khi các thay đổi trong DOM được phản ánh trong bộ sưu tập . Nội dung bị thay đổi khi một nút được sửa đổi. Không Trực tuyến bây giờ là. khi bất kỳ thay đổi nào trong DOM không ảnh hưởng đến nội dung của bộ sưu tập. tài liệu. getElementsByClassName() là một HTMLCollection và đang hoạt động.

Làm cách nào để phân tích cú pháp HTMLCollection trong JavaScript?

Mục trong Bộ sưu tập HTML() .
bộ sưu tập const = tài liệu. getElementsByTagName("p"). mục(0); . bên trongHTML;
bộ sưu tập const = tài liệu. getElementsByTagName("p")[0]; . bên trongHTML;
getElementsByTagName("p")[0]. innerHTML = "Đoạn đã thay đổi";

Cái nào sau đây sẽ trả về một đối tượng HTMLCollection?

Phương thức getElementsByTagName() trả về một đối tượng HTMLCollection. Một đối tượng HTMLCollection là một danh sách giống như mảng (bộ sưu tập) các phần tử HTML.

Bạn có thể lặp qua HTMLCollection không?

Một HTMLCollection không có các phương thức giống như một mảng, nhưng nó vẫn là một bộ sưu tập có thể lặp lại và có thể được sử dụng làm nguồn cho một biến vòng lặp.