IDBObjectStore: delete() 方法

Baseline 已廣泛支援

此特性已相當成熟,可在許多裝置和瀏覽器版本上使用。自 ⁨2015 年 7 月⁩以來,各瀏覽器均已提供此特性。

注意:此功能在 Web Workers 中可用。

IDBObjectStore 介面的 delete() 方法會返回一個 IDBRequest 物件,並在單獨的執行緒中刪除指定的記錄或記錄。

可以傳入一個鍵或一個 IDBKeyRange,從而允許從儲存區中刪除一條或多條記錄。要刪除儲存區中的所有記錄,請使用 IDBObjectStore.clear

請注意,如果您正在使用 IDBCursor,可以使用 IDBCursor.delete() 方法更高效地刪除當前記錄 — 無需顯式查詢記錄的鍵。

語法

js
delete(key)

引數

key

要刪除的記錄的鍵,或用於刪除範圍內所有鍵的記錄的 IDBKeyRange

返回值

一個 IDBRequest 物件,後續與此操作相關的事件會在此物件上觸發。

如果操作成功,請求的 result 屬性的值將為 undefined

異常

此方法可能會引發以下型別的 DOMException

TransactionInactiveError DOMException

如果此物件儲存的事務處於非活動狀態,則丟擲。

ReadOnlyError DOMException

如果物件儲存的事務模式為只讀,則丟擲。

InvalidStateError DOMException

如果物件儲存已被刪除,則丟擲。

DataError DOMException

如果 key 不是 有效鍵鍵範圍,則丟擲。

示例

以下程式碼片段展示了 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①

瀏覽器相容性

另見