IDBCursor - 用于遍历数据库的游标

IDBCursorIndexedDB API 的接口,用于遍历或迭代数据库中多个记录的游标

游标有一个源,指示它正在迭代的索引或对象存储。它具有该范围内的位置,并且按照记录键的顺序增加或减少的方向移动。游标使应用程序能够异步处理游标范围内的所有记录。

您可以同时拥有无限数量的游标。对于给定的游标,您总是能够获取相同的 IDBCursor 对象。操作是在底层索引或对象库上执行的。

注意: 此特性在 Web Worker 中可用。

属性

IDBCursor.source 只读

返回游标迭代的 IDBObjectStoreIDBIndex。不管是当前正在迭代游标,迭代超过其结束,或者其事务未处于活动状态,此函数永远不会返回 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() 并支持二进制密钥。

桌面浏览器兼容性

特性ChromeEdgeFirefoxInternet ExplorerOperaSafari
基础支持

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

101157
key

24

23 — 24 webkit

12

16

10 — 16 moz

101157
primaryKey

24

23 — 24 webkit

12

16

10 — 16 moz

101157
source

24

23 — 24 webkit

12

16

10 — 16 moz

101157
advance

24

23 — 24 webkit

12

16

10 — 16 moz

101157
continue

24

23 — 24 webkit

12

16

10 — 16 moz

101157
continuePrimaryKey58 不支持

51

10 — 51 moz

未知4510.1
delete

24

23 — 24 webkit

12

16

10 — 16 moz

101157
update

24

23 — 24 webkit

12

16

10 — 16 moz

101157

移动浏览器兼容性

特性AndroidChrome for AndroidEdge mobileFirefox for AndroidIE mobileOpera AndroidiOS 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 未知228
key 支持 支持 支持22 未知228
primaryKey 支持 支持 支持22 未知228
source 支持 支持 支持22 未知228
advance 支持 支持 支持22 未知228
continue 支持 支持 支持22 未知228
continuePrimaryKey5858 支持51 未知4510.1
delete 支持 支持 支持22 未知228
update 支持 支持 支持22 未知228

1. 部分的

相关链接