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 - 參考示例:待辦事項通知(檢視即時示例)。