IDBIndex: openKeyCursor() 方法

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

IDBIndex 接口的 openKeyCursor() 方法返回一个 IDBRequest 对象,并在单独的线程中创建通过此索引排列的指定键范围上的游标。

该方法根据指定的 direction 设置游标的位置到相应的键。

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

注意:openKeyCursor() 返回的游标不提供引用值,如 IDBIndex.openCursor 所做的那样。这使得获取键列表更加有效率。

语法

js
openKeyCursor()
openKeyCursor(range)
openKeyCursor(range, direction)

参数

range 可选

用作游标范围的键或 IDBKeyRange。如果没有传递,这将默认为选择此对象存储中所有记录的键范围。

direction 可选

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

返回值

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

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

  • 一个 IDBCursor 对象,指向匹配给定查询的第一个记录
  • null 如果没有找到匹配的记录。

异常

此方法可能会引发以下类型之一的 DOMException

TransactionInactiveError DOMException

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

TypeError

如果 direction 参数的值无效,则抛出。

DataError DOMException

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

InvalidStateError DOMException

如果 IDBIndex 已被删除或移除,则抛出。

示例

在以下示例中,我们打开事务和对象存储,然后从简单的联系人数据库中获取索引 lName。然后,我们使用 openKeyCursor() 在索引上打开键游标 - 这与使用 IDBObjectStore.openKeyCursor 直接在 ObjectStore 上打开游标相同,只是返回的记录是根据索引排序,而不是主键排序。

最后,我们遍历索引中的每个记录,并将引用记录的姓氏和相应的记录主键插入到 HTML 表格中。

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

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

  myIndex.openKeyCursor().onsuccess = (event) => {
    const cursor = event.target.result;
    if (cursor) {
      const tableRow = document.createElement("tr");
      tableRow.appendChild(document.createElement("td")).textContent =
        cursor.key;
      tableRow.appendChild(document.createElement("td")).textContent =
        cursor.primaryKey;
      tableEntry.appendChild(tableRow);

      cursor.continue();
    } else {
      console.log("All last names displayed.");
    }
  };
}

规范

规范
Indexed Database API 3.0
# ref-for-dom-idbindex-openkeycursor①

浏览器兼容性

BCD 表格仅在启用 JavaScript 的浏览器中加载。

另请参阅