IDBObjectStore: index() 方法
注意:此功能在 Web Workers 中可用。
index()
是 IDBObjectStore
接口的方法,用于在当前对象存储中打开一个命名索引。打开索引后,可以使用它来执行各种操作,例如使用游标返回按索引排序的一系列记录。
语法
js
index(name)
参数
name
-
要打开的索引的名称。
返回值
用于访问索引的 IDBIndex
对象。
异常
InvalidStateError
DOMException
-
如果源对象存储已被删除,或者对象存储的事务已完成,则抛出该异常。
NotFoundError
DOMException
-
如果数据库中不存在具有给定名称(区分大小写)的索引,则抛出该异常。
示例
在以下示例中,我们打开一个事务和一个对象存储,然后从一个简单的联系人数据库中获取索引 lName
。然后,我们使用 IDBIndex.openCursor
在索引上打开一个基本游标 - 这与直接使用 IDBObjectStore.openCursor
在 ObjectStore
上打开游标相同,只是返回的记录是根据索引排序的,而不是根据主键排序的。
最后,我们遍历每个记录,并将数据插入到 HTML 表格中。有关完整的示例,请参阅我们的 IndexedDB-examples 演示库中的 IDBIndex 示例 (查看示例)。
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 # dom-idbobjectstore-index |
浏览器兼容性
BCD 表格仅在浏览器中加载
另请参阅
- 使用 IndexedDB
- 启动事务:
IDBDatabase
- 使用事务:
IDBTransaction
- 设置键范围:
IDBKeyRange
- 检索和修改数据:
IDBObjectStore
- 使用游标:
IDBCursor
- 参考示例:待办提醒 (查看示例)。