IDBObjectStore: delete() 方法
注意:此功能在 Web Workers 中可用。
IDBObjectStore 接口的 delete() 方法会返回一个 IDBRequest 对象,并在单独的线程中删除指定的记录或记录。
可以传入一个键或一个 IDBKeyRange,从而允许从存储区中删除一条或多条记录。要删除存储区中的所有记录,请使用 IDBObjectStore.clear。
请注意,如果您正在使用 IDBCursor,可以使用 IDBCursor.delete() 方法更高效地删除当前记录 — 无需显式查找记录的键。
语法
js
delete(key)
参数
key-
要删除的记录的键,或用于删除范围内所有键的记录的
IDBKeyRange。
返回值
一个 IDBRequest 对象,后续与此操作相关的事件会在此对象上触发。
如果操作成功,请求的 result 属性的值将为 undefined。
异常
此方法可能会引发以下类型的 DOMException
TransactionInactiveErrorDOMException-
如果此对象存储的事务处于非活动状态,则抛出。
ReadOnlyErrorDOMException-
如果对象存储的事务模式为只读,则抛出。
InvalidStateErrorDOMException-
如果对象存储已被删除,则抛出。
DataErrorDOMException
示例
以下代码片段展示了 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① |
浏览器兼容性
加载中…
另见
- 使用 IndexedDB
- 开始事务:
IDBDatabase - 使用事务:
IDBTransaction - 设置键的范围:
IDBKeyRange - 检索和修改数据:
IDBObjectStore - 使用游标:
IDBCursor - 参考示例:待办事项通知(查看实时示例)。