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
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:
TransactionInactiveErrorDOMException-
Được ném nếu giao dịch của object store này không hoạt động.
ReadOnlyErrorDOMException-
Được ném nếu chế độ giao dịch của object store là chỉ đọc.
InvalidStateErrorDOMException-
Được ném nếu object store đã bị xóa.
DataErrorDOMException-
Được ném nếu
keykhô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.
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
| Specification |
|---|
| Indexed Database API 3.0> # ref-for-dom-idbobjectstore-delete①> |
Tương thích trình duyệt
Xem thêm
- Sử dụng IndexedDB
- Bắt đầu giao dịch:
IDBDatabase - Sử dụng giao dịch:
IDBTransaction - Thiết lập phạm vi khóa:
IDBKeyRange - Truy xuất và thay đổi dữ liệu của bạn:
IDBObjectStore - Sử dụng con trỏ:
IDBCursor - Ví dụ tham khảo: To-do Notifications (Xem ví dụ trực tiếp).