IDBCursor
注意:此功能在 Web Workers 中可用。
注意: 不要与 IDBCursorWithValue 混淆,它只是一个带有额外 value 属性的 IDBCursor 接口。
IDBCursor 接口是 IndexedDB API 的一部分,它代表一个用于遍历或迭代数据库中多个记录的 游标。
游标有一个源,指示它正在遍历哪个索引或对象存储。它在范围内的位置,并沿键顺序递增或递减的方向移动。游标使应用程序能够异步处理游标范围内的所有记录。
您可以同时拥有无限数量的游标。对于给定的游标,您始终会获得相同的 IDBCursor 对象。操作将在底层索引或对象存储上执行。
实例属性
注意: IDBCursorWithValue 是一个带有额外 value 属性的 IDBCursor 接口。
IDBCursor.source只读-
返回游标正在迭代的
IDBObjectStore或IDBIndex。即使游标当前正在迭代、已迭代到末尾,或者其事务不活跃,此函数也永远不会返回 null 或抛出异常。 IDBCursor.direction只读-
返回游标的遍历方向。
IDBCursor.key只读-
返回游标位置记录的键。如果游标超出了其范围,则此值为
undefined。游标的键可以是任何数据类型。 IDBCursor.primaryKey只读-
返回游标当前有效的首要键。如果游标当前正在迭代或已迭代超出其范围,则此值为
undefined。游标的首要键可以是任何数据类型。 IDBCursor.request只读-
返回用于获取游标的
IDBRequest。
实例方法
IDBCursor.advance()-
设置游标应向前移动其位置的次数。
IDBCursor.continue()-
将游标沿其方向移动到下一个位置,到键与可选的
key参数匹配的项。 IDBCursor.continuePrimaryKey()-
将游标设置为给定的索引键和首要键(作为参数提供)。
IDBCursor.delete()-
返回一个
IDBRequest对象,并在单独的线程中删除游标位置的记录,而不改变游标的位置。这可用于删除特定记录。 IDBCursor.update()-
返回一个
IDBRequest对象,并在单独的线程中更新对象存储中游标当前位置的值。这可用于更新特定记录。
常量
已弃用:此特性不再推荐。虽然某些浏览器可能仍然支持它,但它可能已经从相关的网络标准中删除,可能正在删除过程中,或者可能仅为兼容性目的而保留。请避免使用它,如果可能,请更新现有代码;请参阅本页底部的兼容性表格以指导您的决策。请注意,此特性可能随时停止工作。
警告: 这些常量不再可用 — 它们在 Gecko 25 中已被移除。您应该直接使用字符串常量而不是它们。(Firefox bug 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 |
浏览器兼容性
加载中…
另见
- 使用 IndexedDB
- 开始事务:
IDBDatabase - 使用事务:
IDBTransaction - 设置键的范围:
IDBKeyRange - 检索和修改数据:
IDBObjectStore - 参考示例:待办事项通知(实时查看示例)。