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①

浏览器兼容性

另见