IDBCursor: delete() 方法

Baseline 已廣泛支援

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

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

delete() 方法屬於 IDBCursor 介面,它會返回一個 IDBRequest 物件,並在一個單獨的執行緒中刪除遊標位置上的記錄,而不會改變遊標的位置。記錄刪除後,遊標的值會被設定為 null。

請注意,您不能在從 IDBIndex.openKeyCursor() 獲取的遊標上呼叫 delete()(或 IDBCursor.update())。對於此類需求,您應該改用 IDBIndex.openCursor()

語法

js
delete()

引數

無。

返回值

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

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

異常

此方法可能會丟擲以下型別之一的DOMException

TransactionInactiveError DOMException

如果此 IDBCursor 的事務不活躍,則丟擲此錯誤。

ReadOnlyError DOMException

如果事務模式是隻讀的,則丟擲此錯誤。

InvalidStateError DOMException

如果遊標是使用 IDBindex.openKeyCursor 建立的,或者當前正在迭代中,或者已經迭代到末尾之後,則丟擲此錯誤。

示例

在這個簡單的程式碼片段中,我們建立一個事務,檢索一個物件儲存,然後使用遊標遍歷物件儲存中的所有記錄。如果當前遊標的 albumTitle 是“Grace under pressure”,我們就使用 const request = cursor.delete(); 刪除整個記錄。

游標不需要我們根據鍵來選擇資料;我們可以直接獲取所有資料。另請注意,在迴圈的每次迭代中,你可以使用 cursor.value.foo 從游標物件下的當前記錄中獲取資料。有關完整的可工作示例,請參閱我們的 IDBCursor 示例線上檢視示例)。

js
function deleteResult() {
  list.textContent = "";
  const transaction = db.transaction(["rushAlbumList"], "readwrite");
  const objectStore = transaction.objectStore("rushAlbumList");

  objectStore.openCursor().onsuccess = (event) => {
    const cursor = event.target.result;
    if (cursor) {
      if (cursor.value.albumTitle === "Grace under pressure") {
        const request = cursor.delete();
        request.onsuccess = () => {
          console.log(
            "Deleted that mediocre album from 1984. Even Power windows is better.",
          );
        };
      } else {
        const listItem = document.createElement("li");
        listItem.textContent = `${cursor.value.albumTitle}, ${cursor.value.year}`;
        list.appendChild(listItem);
      }
      cursor.continue();
    } else {
      console.log("Entries displayed.");
    }
  };
}

規範

規範
Indexed Database API 3.0
# ref-for-dom-idbcursor-delete①

瀏覽器相容性

另見