IDBObjectStore: delete() 方法
注意:此功能在 Web Workers 中可用。
IDBObjectStore 介面的 delete() 方法會返回一個 IDBRequest 物件,並在單獨的執行緒中刪除指定的記錄或記錄。
可以傳入一個鍵或一個 IDBKeyRange,從而允許從儲存區中刪除一條或多條記錄。要刪除儲存區中的所有記錄,請使用 IDBObjectStore.clear。
請注意,如果您正在使用 IDBCursor,可以使用 IDBCursor.delete() 方法更高效地刪除當前記錄 — 無需顯式查詢記錄的鍵。
語法
js
delete(key)
引數
key-
要刪除的記錄的鍵,或用於刪除範圍內所有鍵的記錄的
IDBKeyRange。
返回值
一個 IDBRequest 物件,後續與此操作相關的事件會在此物件上觸發。
如果操作成功,請求的 result 屬性的值將為 undefined。
異常
此方法可能會引發以下型別的 DOMException
TransactionInactiveErrorDOMException-
如果此物件儲存的事務處於非活動狀態,則丟擲。
ReadOnlyErrorDOMException-
如果物件儲存的事務模式為只讀,則丟擲。
InvalidStateErrorDOMException-
如果物件儲存已被刪除,則丟擲。
DataErrorDOMException
示例
以下程式碼片段展示了 deleteItem() 函式,該函式是待辦事項通知示例應用的一部分。此應用使用 IndexedDB 儲存待辦事項列表項。您可以在 GitHub 上檢視該應用的完整程式碼,並現場試用該應用。
當用戶點選按鈕刪除待辦事項列表項時,會呼叫 deleteItem() 函式。專案鍵設定在按鈕的 'data-task' 資料屬性中,因此函式知道要刪除哪個專案。該函式開啟一個事務來刪除該專案,並提供其鍵。事務完成後,該函式會更新應用 UI,報告該專案已被刪除。
請注意,在此函式中,db 是一個指向 IDBDatabase 物件的全域性變數,該物件在應用載入時初始化。
js
function deleteItem(event) {
// retrieve the name of the task we want to delete
let dataTask = event.target.getAttribute("data-task");
// open a database transaction and delete the task, finding it by the name we retrieved above
let transaction = db.transaction(["toDoList"], "readwrite");
let request = transaction.objectStore("toDoList").delete(dataTask);
// report that the data item has been deleted
transaction.oncomplete = () => {
// delete the parent of the button, which is the list item, so it no longer is displayed
event.target.parentNode.parentNode.removeChild(event.target.parentNode);
note.appendChild(document.createElement("li")).textContent =
`Task "${dataTask}" deleted.`;
};
}
規範
| 規範 |
|---|
| Indexed Database API 3.0 # ref-for-dom-idbobjectstore-delete① |
瀏覽器相容性
載入中…
另見
- 使用 IndexedDB
- 開始事務:
IDBDatabase - 使用事務:
IDBTransaction - 設定鍵的範圍:
IDBKeyRange - 檢索和修改資料:
IDBObjectStore - 使用遊標:
IDBCursor - 參考示例:待辦事項通知(檢視即時示例)。