IDBCursor.delete()

IDBCursor インターフェイスの delete() メソッドは、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 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

関連情報