IDBObjectStore: delete() 方法

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

delete()IDBObjectStore 接口的方法,它返回一个 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①

浏览器兼容性

BCD 表格仅在启用了 JavaScript 的浏览器中加载。

另请参阅