IDBCursor.delete()

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

注意点として、IDBIndex.openKeyCursor() で取得したカーソルでは delete() (や IDBCursor.update()) を呼ぶことはできません。このような用途のためには、かわりに IDBIndex.openCursor() を使用しないといけません。

注: この機能は Web Worker 内で利用可能です。

構文

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

関連情報