IDBIndex: openKeyCursor() 方法
注意:此功能在 Web Workers 中可用。
openKeyCursor() 方法是 IDBIndex 接口的一个方法,它返回一个 IDBRequest 对象,并在另一个线程中创建一个按照该索引排序的光标,该光标遍历指定的键范围。
该方法根据指定的方向将光标定位到相应的键。
如果未指定键范围或键范围为 null,则该范围将包含所有键。
注意: openKeyCursor() 返回的光标不会像 IDBIndex.openCursor 那样使引用的值可用。这使得获取键列表更加高效。
语法
js
openKeyCursor()
openKeyCursor(range)
openKeyCursor(range, direction)
参数
range可选-
用于光标范围的键或
IDBKeyRange。如果未传递任何值,则默认选择此对象存储中所有记录的键范围。 direction可选-
光标的 方向。有关可能的值,请参阅 IDBCursor 常量。
返回值
一个 IDBRequest 对象,后续与此操作相关的事件会在此对象上触发。
如果操作成功,请求的 result 属性的值是
- 指向第一个匹配给定查询的记录的
IDBCursor对象 - 如果未找到匹配的记录,则为
null。
异常
此方法可能会抛出以下类型之一的DOMException:
TransactionInactiveErrorDOMException-
如果此
IDBIndex的事务处于非活动状态,则会抛出此异常。 TypeError-
如果方向参数的值无效,则抛出此异常。
DataErrorDOMException-
如果提供的键或键范围包含无效键,则会抛出此异常。
InvalidStateErrorDOMException-
如果
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① |
浏览器兼容性
加载中…
另见
- 使用 IndexedDB
- 开始事务:
IDBDatabase - 使用事务:
IDBTransaction - 设置键的范围:
IDBKeyRange - 检索和修改数据:
IDBObjectStore - 使用游标:
IDBCursor - 参考示例:待办事项通知(查看实时示例)。