IDBIndex: openCursor() 方法

Baseline 已广泛支持

此特性已相当成熟,可在许多设备和浏览器版本上使用。自 ⁨2015 年 7 月⁩以来,各浏览器均已提供此特性。

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

openCursor() 方法是 IDBIndex 接口的一个方法,它返回一个 IDBRequest 对象,并在单独的线程中,创建一个 游标,用于指定的键范围。

该方法根据指定的方向,将游标的位置设置为相应的记录。

如果未指定键范围或键范围为 null,则该范围包含所有记录。

语法

js
openCursor()
openCursor(range)
openCursor(range, direction)

参数

range 可选

用于作为游标范围的键或 IDBKeyRange。如果未传入任何值,则默认情况下将选择此对象存储中的所有记录的键范围。

direction 可选

游标的 方向。有关可能的值,请参阅 IDBCursor 常量

返回值

一个 IDBRequest 对象,后续与此操作相关的事件会在此对象上触发。

如果操作成功,请求的 result 属性的值是

  • 一个指向与给定查询匹配的第一条记录的 IDBCursorWithValue 对象
  • 如果未找到匹配的记录,则为 null

异常

此方法可能会抛出以下类型之一的DOMException

TransactionInactiveError DOMException

如果此 IDBIndex 的事务处于非活动状态,则会抛出此异常。

TypeError

如果 direction 参数的值无效,则会抛出此异常。

DataError DOMException

如果提供的键或键范围包含无效键,则会抛出此异常。

InvalidStateError DOMException

如果 IDBIndex 已被删除或移除,则会抛出此异常。

示例

在以下示例中,我们打开一个事务和一个对象存储,然后从一个简单的联系人数据库中获取索引 `lName`。然后,我们使用 `openCursor()` 在该索引上打开一个基本游标 — 这与直接在 `ObjectStore` 上使用 IDBObjectStore.openCursor 打开游标的工作方式相同,不同之处在于返回的记录是根据索引排序的,而不是根据主键排序的。

最后,我们遍历每条记录,并将数据插入 HTML 表中。有关完整的可运行示例,请参阅我们的 IndexedDB-examples demo 仓库在线查看示例)。

js
function displayDataByIndex() {
  tableEntry.textContent = "";
  const transaction = db.transaction(["contactsList"], "readonly");
  const objectStore = transaction.objectStore("contactsList");

  const myIndex = objectStore.index("lName");

  myIndex.openCursor().onsuccess = (event) => {
    const cursor = event.target.result;
    if (cursor) {
      const tableRow = document.createElement("tr");
      for (const cell of [
        cursor.value.id,
        cursor.value.lName,
        cursor.value.fName,
        cursor.value.jTitle,
        cursor.value.company,
        cursor.value.eMail,
        cursor.value.phone,
        cursor.value.age,
      ]) {
        const tableCell = document.createElement("td");
        tableCell.textContent = cell;
        tableRow.appendChild(tableCell);
      }
      tableEntry.appendChild(tableRow);

      cursor.continue();
    } else {
      console.log("Entries all displayed.");
    }
  };
}

规范

规范
Indexed Database API 3.0
# ref-for-dom-idbindex-opencursor②

浏览器兼容性

另见