IDBCursor

注意:此功能在 Web Workers 中可用。

注意:不要与 IDBCursorWithValue 混淆,它只是一个具有额外value属性的IDBCursor接口。

IndexedDB API 的IDBCursor接口表示用于遍历或迭代数据库中多个记录的游标

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

您可以同时拥有无限数量的游标。您始终获得表示给定游标的相同IDBCursor对象。操作是在底层索引或对象存储上执行的。

实例属性

注意:IDBCursorWithValue 是一个具有额外value属性的IDBCursor接口。

IDBCursor.source 只读

返回游标正在迭代的IDBObjectStoreIDBIndex。即使游标当前正在迭代、已迭代到其末尾或其事务未处于活动状态,此函数也不会返回 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 示例查看示例)。

js
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 的浏览器中加载。

另请参阅