IDBCursor: delete() メソッド

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since September 2021.

メモ: この機能はウェブワーカー内で利用可能です。

delete()IDBCursor インターフェイスのメソッドで、IDBRequest オブジェクトを返し、別のスレッドで、カーソルの位置を変えずにカーソルが指しているレコードを削除します。レコードが削除されると、カーソルの値は null になります。

注意点として、delete() (や IDBCursor.update()) を IDBIndex.openKeyCursor() で取得したカーソルで呼ぶことはできません。このような用途のためには、かわりに 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 example を参照してください。(動く例を見る)

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("項目をを表示しました。");
    }
  };
}

仕様書

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

ブラウザーの互換性

BCD tables only load in the browser

関連情報