IDBObjectStore: delete() 方法
注意:此功能在Web Workers中可用。
delete()
是 IDBObjectStore
接口的方法,它返回一个 IDBRequest
对象,并在单独的线程中删除指定的记录或记录。
可以传递键或 IDBKeyRange
,从而允许从存储中删除一个或多个记录。要删除存储中的所有记录,请使用 IDBObjectStore.clear
。
请记住,如果您使用的是 IDBCursor
,则可以使用 IDBCursor.delete()
方法更有效地删除当前记录 - 无需显式查找记录的键。
语法
delete(key)
参数
key
-
要删除的记录的键,或
IDBKeyRange
以删除键在范围内的所有记录。
返回值
一个 IDBRequest
对象,后续与此操作相关的事件将在该对象上触发。
如果操作成功,则请求的 result
属性值为 undefined
。
异常
此方法可能会引发以下类型的 DOMException
TransactionInactiveError
DOMException
-
如果此对象存储的事务处于非活动状态,则抛出此异常。
ReadOnlyError
DOMException
-
如果对象存储的事务模式为只读,则抛出此异常。
InvalidStateError
DOMException
-
如果对象存储已被删除,则抛出此异常。
DataError
DOMException
示例
以下代码片段显示了 deleteItem()
函数,它是待办事项通知示例应用程序的一部分。此应用程序使用 IndexedDB 存储待办事项列表项。您可以在 GitHub 上查看应用程序的完整代码,并 尝试在线体验应用程序。
当用户单击按钮删除待办事项列表项时,会调用 deleteItem()
函数。该项的键设置在按钮的 'data-task'
数据属性中,因此该函数知道要删除哪个项。该函数打开一个数据库事务以删除该项,并提供其键。当事务完成时,该函数更新应用程序 UI 以报告该项已删除。
请注意,在此函数中,db
是一个全局变量,引用一个在应用程序加载时初始化的 IDBDatabase
对象。
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 的浏览器中加载。
另请参阅
- 使用 IndexedDB
- 启动事务:
IDBDatabase
- 使用事务:
IDBTransaction
- 设置键范围:
IDBKeyRange
- 检索和更改数据:
IDBObjectStore
- 使用游标:
IDBCursor
- 参考示例:待办事项通知(查看示例)。