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

js
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ệ

HierarchyRequestError DOMException

Đượ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:

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ó:

js
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).

js
// 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

js
// 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ể.

js
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:

html
<section>
  <ul>
    <li>hello world</li>
  </ul>
</section>

Thông số kỹ thuật

Specification
DOM
# dom-node-appendchild

Tương thích trình duyệt

Xem thêm