IDBObjectStore: phương thức delete()

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.

Note: This feature is available in Web Workers.

Phương thức delete() của giao diện IDBObjectStore trả về một đối tượng IDBRequest, và, trong một luồng riêng biệt, xóa (các) bản ghi được chỉ định.

Có thể truyền vào một khóa hoặc một IDBKeyRange, cho phép xóa một hoặc nhiều bản ghi từ một store. Để xóa tất cả bản ghi trong một store, hãy sử dụng IDBObjectStore.clear.

Lưu ý rằng nếu bạn đang sử dụng một IDBCursor, bạn có thể sử dụng phương thức IDBCursor.delete() để xóa bản ghi hiện tại hiệu quả hơn — mà không cần phải tra cứu rõ ràng khóa của bản ghi.

Cú pháp

js
delete(key)

Tham số

key

Khóa của bản ghi cần xóa, hoặc một IDBKeyRange để xóa tất cả bản ghi có khóa nằm trong khoảng.

Giá trị trả về

Một đối tượng IDBRequest mà các sự kiện tiếp theo liên quan đến thao tác này sẽ được kích hoạt trên đó.

Nếu thao tác thành công, giá trị của thuộc tính result của request là undefined.

Ngoại lệ

Phương thức này có thể gây ra một DOMException thuộc các loại sau:

TransactionInactiveError DOMException

Được ném nếu giao dịch của object store này không hoạt động.

ReadOnlyError DOMException

Được ném nếu chế độ giao dịch của object store là chỉ đọc.

InvalidStateError DOMException

Được ném nếu object store đã bị xóa.

DataError DOMException

Được ném nếu key không phải là một khóa hợp lệ hoặc một phạm vi khóa.

Ví dụ

Đoạn mã sau minh họa hàm deleteItem(), là một phần của ứng dụng ví dụ To-do Notifications. Ứng dụng này lưu trữ các mục danh sách việc cần làm bằng IndexedDB. Bạn có thể xem toàn bộ mã của ứng dụng trên GitHub, và thử chạy ứng dụng trực tiếp.

Hàm deleteItem() được gọi khi người dùng nhấp vào nút để xóa một mục trong danh sách việc cần làm. Khóa của mục được đặt trong thuộc tính dữ liệu 'data-task' của nút, vì vậy hàm biết cần xóa mục nào. Hàm mở một giao dịch cơ sở dữ liệu để xóa mục, cung cấp khóa của nó. Khi giao dịch hoàn tất, hàm cập nhật giao diện ứng dụng để báo cáo rằng mục đã được xóa.

Lưu ý rằng trong hàm này db là một biến toàn cục tham chiếu đến một đối tượng IDBDatabase được khởi tạo khi ứng dụng tải.

js
function deleteItem(event) {
  // lấy tên của tác vụ chúng ta muốn xóa
  let dataTask = event.target.getAttribute("data-task");

  // mở một giao dịch cơ sở dữ liệu và xóa tác vụ, tìm nó theo tên chúng ta đã lấy ở trên
  let transaction = db.transaction(["toDoList"], "readwrite");
  let request = transaction.objectStore("toDoList").delete(dataTask);

  // báo cáo rằng mục dữ liệu đã được xóa
  transaction.oncomplete = () => {
    // xóa phần tử cha của nút, tức là mục danh sách, để nó không còn được hiển thị
    event.target.parentNode.parentNode.removeChild(event.target.parentNode);
    note.appendChild(document.createElement("li")).textContent =
      `Task "${dataTask}" deleted.`;
  };
}

Đặc tả kỹ thuật

Thông số kỹ thuật
Indexed Database API 3.0
# ref-for-dom-idbobjectstore-delete①

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

Xem thêm