IDBCursor
注意:此功能在 Web Workers 中可用。
注意:不要与 IDBCursorWithValue
混淆,它只是一个具有额外value
属性的IDBCursor
接口。
IndexedDB API 的IDBCursor
接口表示用于遍历或迭代数据库中多个记录的游标。
游标具有指示其正在迭代哪个索引或对象存储的源。它在范围内具有一个位置,并沿记录键的顺序以递增或递减的方向移动。游标使应用程序能够异步处理游标范围内的所有记录。
您可以同时拥有无限数量的游标。您始终获得表示给定游标的相同IDBCursor
对象。操作是在底层索引或对象存储上执行的。
实例属性
注意:IDBCursorWithValue
是一个具有额外value
属性的IDBCursor
接口。
IDBCursor.source
只读-
返回游标正在迭代的
IDBObjectStore
或IDBIndex
。即使游标当前正在迭代、已迭代到其末尾或其事务未处于活动状态,此函数也不会返回 null 或引发异常。 IDBCursor.direction
只读-
返回游标的遍历方向。
IDBCursor.key
只读-
返回游标位置处记录的键。如果游标位于其范围之外,则将其设置为
undefined
。游标的键可以是任何数据类型。 IDBCursor.primaryKey
只读-
返回游标当前有效的
IDBCursor.request
只读-
返回用于获取游标的
IDBRequest
。
实例方法
IDBCursor.advance()
-
设置游标应将其位置向前移动的次数。
IDBCursor.continue()
-
将游标沿其方向推进到下一个位置,到其键与可选
key
参数匹配的项目。 IDBCursor.continuePrimaryKey()
-
将游标设置为作为参数给出的给定索引键和主键。
IDBCursor.delete()
-
返回一个
IDBRequest
对象,并在单独的线程中删除游标位置处的记录,而不更改游标的位置。这可用于删除特定记录。 IDBCursor.update()
-
返回一个
IDBRequest
对象,并在单独的线程中更新对象存储中游标当前位置处的值。这可用于更新特定记录。
常量
已弃用:不再推荐使用此功能。尽管某些浏览器可能仍然支持它,但它可能已从相关的 Web 标准中删除,可能正在被删除过程中,或者可能仅出于兼容性目的而保留。避免使用它,如果可能,请更新现有代码;请参阅此页面底部的兼容性表以指导您的决策。请注意,此功能可能随时停止工作。
警告:这些常量不再可用——它们已在 Gecko 25 中删除。您应该改为直接使用字符串常量。(Firefox 错误 891944)
NEXT
:"next"
:游标显示所有记录,包括重复项。它从键范围的下限开始,向上移动(按键顺序单调递增)。NEXTUNIQUE
:"nextunique"
:游标显示所有记录,不包括重复项。如果多条记录具有相同的键,则仅检索迭代的第一条记录。它从键范围的下限开始,向上移动。PREV
:"prev"
:游标显示所有记录,包括重复项。它从键范围的上限开始,向下移动(按键顺序单调递减)。PREVUNIQUE
:"prevunique"
:游标显示所有记录,不包括重复项。如果多条记录具有相同的键,则仅检索迭代的第一条记录。它从键范围的上限开始,向下移动。
示例
在此简单片段中,我们创建一个事务,检索一个对象存储,然后使用游标迭代对象存储中的所有记录。游标不需要我们根据键选择数据;我们只需获取所有数据即可。另请注意,在循环的每次迭代中,您可以使用cursor.value.foo
从游标对象下的当前记录中获取数据。有关完整的可工作示例,请参阅我们的IDBCursor 示例(查看示例)。
function displayData() {
const transaction = db.transaction(["rushAlbumList"], "readonly");
const objectStore = transaction.objectStore("rushAlbumList");
objectStore.openCursor().onsuccess = (event) => {
const cursor = event.target.result;
if (cursor) {
const listItem = document.createElement("li");
listItem.textContent = `${cursor.value.albumTitle}, ${cursor.value.year}`;
list.appendChild(listItem);
cursor.continue();
} else {
console.log("Entries all displayed.");
}
};
}
规范
规范 |
---|
Indexed Database API 3.0 # cursor-interface |
浏览器兼容性
BCD 表仅在启用 JavaScript 的浏览器中加载。
另请参阅
- 使用 IndexedDB
- 启动事务:
IDBDatabase
- 使用事务:
IDBTransaction
- 设置键范围:
IDBKeyRange
- 检索和更改您的数据:
IDBObjectStore
- 参考示例:待办事项通知(查看示例)。