IDBObjectStore: index() 方法

Baseline 已广泛支持

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

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

IDBObjectStore 接口的 index() 方法会在当前对象存储中打开一个命名索引,之后可以使用该索引,例如,通过游标返回一系列按该索引排序的记录。

语法

js
index(name)

参数

name

要打开的索引的名称。

返回值

一个用于访问索引的 IDBIndex 对象。

异常

InvalidStateError DOMException

如果源对象存储已被删除,或者对象存储的事务已完成,则抛出此错误。

NotFoundError DOMException

如果数据库中不存在指定名称(区分大小写)的索引,则抛出此错误。

示例

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

最后,我们遍历每条记录,并将数据插入 HTML 表格。有关完整的可运行示例,请参阅我们的 IndexedDB 示例存储库中的 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

浏览器兼容性

另见