IDBCursor - 用于遍历数据库的游标
IDBCursor
是 IndexedDB API 的接口,用于遍历或迭代数据库中多个记录的游标。
游标有一个源,指示它正在迭代的索引或对象存储。它具有该范围内的位置,并且按照记录键的顺序增加或减少的方向移动。游标使应用程序能够异步处理游标范围内的所有记录。
您可以同时拥有无限数量的游标。对于给定的游标,您总是能够获取相同的 IDBCursor
对象。操作是在底层索引或对象库上执行的。
属性
IDBCursor.source
只读
返回游标迭代的 IDBObjectStore
或 IDBIndex
。不管是当前正在迭代游标,迭代超过其结束,或者其事务未处于活动状态,此函数永远不会返回 null
或抛出异常。
IDBCursor.direction
只读
返回游标遍历的方向。有关可能的值,请参见常量。
IDBCursor.key
只读
返回游标位置记录的键。如果游标在其范围之外,则将其设置为 undefined
。游标的键可以是任何数据类型。
IDBCursor.value
只读
返回游标位置处记录的值。游标的值可以是任何数据类型。
IDBCursor.primaryKey
只读
返回游标的当前有效主键。如果当前正在迭代游标或已在其范围之外迭代,则将其设置为 undefined
。游标的主键可以是任何数据类型。
方法
IDBCursor.advance()
设置游标向前移动其位置的次数。
IDBCursor.continue()
将游标前进到其方向的下一个位置,前进到其键与可选的 key
参数匹配的项目。
IDBCursor.continuePrimaryKey()
将游标设置为给定的索引键和作为参数给出的主键。
IDBCursor.delete()
返回一个 IDBRequest
对象,并在一个单独的线程中删除游标位置的记录,而不更改游标的位置。这可用于删除特定记录。
IDBCursor.update()
返回一个 IDBRequest
对象,并在单独的线程中更新对象库中游标当前位置的值。这可用于更新特定记录。
常量
已废弃 Gecko 13 (Firefox 13 / Thunderbird 13 / SeaMonkey 2.10)
该特性已经从 Web 标准中删除,虽然一些浏览器目前仍然支持它,但也许会在未来的某个时间停止支持,请尽量不要使用该特性。
这些常量不再可用 - 它们已在 Gecko 25 中删除。您应该直接使用字符串常量。(Mozilla bug 891944)
NEXT
:"next"
:游标显示所有记录,包括重复记录。它从键范围的下限开始向上移动(按键的顺序单调递增)。NEXTUNIQUE
:"nextunique"
:游标显示所有记录,不包括重复记录。如果存在具有相同键的多个记录,则仅检索迭代的第一个记录。它从键范围的下限开始向上移动。PREV
:"prev"
:光标显示所有记录,包括重复记录。它从键范围的上限开始向下移动(按键的顺序单调递减)。PREVUNIQUE
:"prevunique"
:游标显示所有记录,不包括重复记录。如果存在具有相同键的多个记录,则仅检索迭代的第一个记录。它从键范围的上限开始向下移动。
实例
在这个简单的片段中,我们创建一个事务,检索一个对象存储,然后使用游标迭代对象存储中的所有记录。游标不需要我们根据键选择数据;我们可以获取所有的数据。另请注意,在循环的每次迭代中,您都可以使用 cursor.value.foo
从游标对象下的当前记录中获取数据。有关完整的工作示例,请参阅我们的 IDBCursor 实例(查看在线实例。)
function displayData() {
var transaction = db.transaction(['rushAlbumList'], "readonly");
var objectStore = transaction.objectStore('rushAlbumList');
objectStore.openCursor().onsuccess = function(event) {
var cursor = event.target.result;
if(cursor) {
var listItem = document.createElement('li');
listItem.innerHTML = cursor.value.albumTitle + ', ' + cursor.value.year;
list.appendChild(listItem);
cursor.continue();
} else {
console.log('所有条目都显示出来了。');
}
};
}
规范
规范 | 状态 | 备注 |
---|---|---|
Indexed Database API cursor 的定义 |
推荐 | 初始定义 |
Indexed Database API 2.0 cursor 的定义 |
推荐 | 添加了 continuePrimaryKey() 并支持二进制密钥。 |
桌面浏览器兼容性
特性 | Chrome | Edge | Firefox | Internet Explorer | Opera | Safari |
---|---|---|---|---|---|---|
基础支持 | 24 23 — 57 webkit | 支持 | 16 10 — 16 moz | 101 | 44 15 — 44 webkit | 7 |
Available in workers | 24 23 — 57 webkit | 支持 | 37 | 未知 | 44 15 — 44 webkit | 7 |
direction | 24 23 — 24 webkit | 12 | 16 10 — 16 moz | 101 | 15 | 7 |
key | 24 23 — 24 webkit | 12 | 16 10 — 16 moz | 101 | 15 | 7 |
primaryKey | 24 23 — 24 webkit | 12 | 16 10 — 16 moz | 101 | 15 | 7 |
source | 24 23 — 24 webkit | 12 | 16 10 — 16 moz | 101 | 15 | 7 |
advance | 24 23 — 24 webkit | 12 | 16 10 — 16 moz | 101 | 15 | 7 |
continue | 24 23 — 24 webkit | 12 | 16 10 — 16 moz | 101 | 15 | 7 |
continuePrimaryKey | 58 | 不支持 | 51 10 — 51 moz | 未知 | 45 | 10.1 |
delete | 24 23 — 24 webkit | 12 | 16 10 — 16 moz | 101 | 15 | 7 |
update | 24 23 — 24 webkit | 12 | 16 10 — 16 moz | 101 | 15 | 7 |
移动浏览器兼容性
特性 | Android | Chrome for Android | Edge mobile | Firefox for Android | IE mobile | Opera Android | iOS Safari |
---|---|---|---|---|---|---|---|
基础支持 | 24 23 — 57 webkit | 24 23 — 57 webkit | 支持 | 22 | 未知 | 22 22 — 44 webkit | 8 |
Available in workers | 24 23 — 57 webkit | 24 23 — 57 webkit | 支持 | 37 | 未知 | 支持 22 — 44 webkit | 未知 |
direction | 支持 | 支持 | 支持 | 22 | 未知 | 22 | 8 |
key | 支持 | 支持 | 支持 | 22 | 未知 | 22 | 8 |
primaryKey | 支持 | 支持 | 支持 | 22 | 未知 | 22 | 8 |
source | 支持 | 支持 | 支持 | 22 | 未知 | 22 | 8 |
advance | 支持 | 支持 | 支持 | 22 | 未知 | 22 | 8 |
continue | 支持 | 支持 | 支持 | 22 | 未知 | 22 | 8 |
continuePrimaryKey | 58 | 58 | 支持 | 51 | 未知 | 45 | 10.1 |
delete | 支持 | 支持 | 支持 | 22 | 未知 | 22 | 8 |
update | 支持 | 支持 | 支持 | 22 | 未知 | 22 | 8 |
1. 部分的
相关链接
- 使用 IndexedDB
- 启动事务:
IDBDatabase
- 使用事务:
IDBTransaction
- 设置一系列键:
IDBKeyRange
- 检索并更改数据:
IDBObjectStore
- 使用游标:
IDBCursor
- 参考实例:To-do 通知 (在线查看实例。)