Node: phương thức appendChild()
Baseline
Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since July 2015.
Phương thức appendChild() của giao diện Node thêm một nút vào cuối danh sách các phần tử con của một nút cha được chỉ định.
Note:
Nếu phần tử con được truyền vào là tham chiếu đến một nút đã tồn tại trong tài liệu, appendChild() sẽ di chuyển nó từ vị trí hiện tại sang vị trí mới.
Nếu phần tử con được truyền vào là một DocumentFragment, toàn bộ nội dung của DocumentFragment sẽ được chuyển vào danh sách con của nút cha đã chỉ định.
appendChild() trả về nút vừa được thêm, hoặc nếu phần tử con là một DocumentFragment, nó sẽ trả về fragment rỗng.
Note:
Không giống như phương thức này, Element.append() hỗ trợ nhiều đối số và hỗ trợ thêm chuỗi. Bạn có thể ưu tiên dùng nó nếu nút của bạn là một phần tử.
Cú pháp
appendChild(child)
Tham số
child-
Nút cần thêm vào nút cha đã cho (thường là một phần tử).
Giá trị trả về
Một Node là phần tử con đã được thêm (child), trừ khi child là một DocumentFragment, trong trường hợp đó trả về DocumentFragment rỗng.
Ngoại lệ
HierarchyRequestErrorDOMException-
Được ném ra khi các ràng buộc của cây DOM bị vi phạm, tức là nếu một trong các trường hợp sau xảy ra:
- Nếu cha của
childkhông phải làDocument,DocumentFragmenthoặcElement. - Nếu việc chèn
childsẽ tạo ra một vòng lặp, tức làchildlà tổ tiên của nút. - Nếu
childkhông phải làDocumentFragment,DocumentType,ElementhoặcCharacterData. - Nếu nút hiện tại là
Textvà cha của nó làDocument. - Nếu nút hiện tại là
DocumentTypevà cha của nó không phải làDocument, vì doctype luôn phải là nút con trực tiếp của một document. - Nếu cha của nút là
Documentvàchildlà mộtDocumentFragmentcó nhiều hơn một nút conElement, hoặc có một nút conText. - Nếu việc chèn
childsẽ làm choDocumentcó nhiều hơn mộtElementlàm phần tử con.
- Nếu cha của
Mô tả
Nếu phần tử con được truyền vào là tham chiếu đến một nút đã tồn tại trong tài liệu, appendChild() sẽ di chuyển nó từ vị trí hiện tại sang vị trí mới - không cần phải xóa nút khỏi nút cha của nó trước khi thêm vào một nút khác. Điều này có nghĩa là một nút không thể ở hai vị trí của tài liệu cùng lúc. Phương thức Node.cloneNode() có thể được dùng để tạo bản sao của nút trước khi thêm nó vào nút cha mới. Các bản sao được tạo bằng cloneNode không tự động được đồng bộ hóa.
appendChild() trả về nút vừa được thêm, thay vì trả về nút cha. Điều này có nghĩa là bạn có thể thêm nút mới ngay khi nó được tạo mà không mất tham chiếu đến nó:
const paragraph = document.body.appendChild(document.createElement("p"));
// Bạn có thể thêm các phần tử khác vào đoạn văn sau này
Mặt khác, bạn không thể dùng appendChild() theo kiểu fluent API (như jQuery).
// Cách này không thêm ba đoạn văn:
// ba phần tử sẽ bị lồng nhau thay vì là các phần tử anh em
document.body
.appendChild(document.createElement("p"))
.appendChild(document.createElement("p"))
.appendChild(document.createElement("p"));
Ví dụ
>Thêm một đoạn văn vào body
// Tạo một phần tử đoạn văn mới và thêm nó vào cuối phần body của tài liệu
const p = document.createElement("p");
document.body.appendChild(p);
Tạo một cấu trúc DOM lồng nhau
Trong ví dụ này, chúng ta cố gắng tạo một cấu trúc DOM lồng nhau bằng ít biến tạm nhất có thể.
const fragment = document.createDocumentFragment();
const li = fragment
.appendChild(document.createElement("section"))
.appendChild(document.createElement("ul"))
.appendChild(document.createElement("li"));
li.textContent = "hello world";
document.body.appendChild(fragment);
Nó tạo ra cây DOM sau:
<section>
<ul>
<li>hello world</li>
</ul>
</section>
Thông số kỹ thuật
| Specification |
|---|
| DOM> # dom-node-appendchild> |