IDBCursor
注意:此功能在 Web Workers 中可用。
注意: 不要與 IDBCursorWithValue 混淆,它只是一個帶有額外 value 屬性的 IDBCursor 介面。
IDBCursor 介面是 IndexedDB API 的一部分,它代表一個用於遍歷或迭代資料庫中多個記錄的 遊標。
遊標有一個源,指示它正在遍歷哪個索引或物件儲存。它在範圍內的位置,並沿鍵順序遞增或遞減的方向移動。遊標使應用程式能夠非同步處理遊標範圍內的所有記錄。
您可以同時擁有無限數量的遊標。對於給定的遊標,您始終會獲得相同的 IDBCursor 物件。操作將在底層索引或物件儲存上執行。
例項屬性
注意: IDBCursorWithValue 是一個帶有額外 value 屬性的 IDBCursor 介面。
IDBCursor.source只讀-
返回遊標正在迭代的
IDBObjectStore或IDBIndex。即使遊標當前正在迭代、已迭代到末尾,或者其事務不活躍,此函式也永遠不會返回 null 或丟擲異常。 IDBCursor.direction只讀-
返回遊標的遍歷方向。
IDBCursor.key只讀-
返回遊標位置記錄的鍵。如果遊標超出了其範圍,則此值為
undefined。遊標的鍵可以是任何資料型別。 IDBCursor.primaryKey只讀-
返回遊標當前有效的首要鍵。如果遊標當前正在迭代或已迭代超出其範圍,則此值為
undefined。遊標的首要鍵可以是任何資料型別。 IDBCursor.request只讀-
返回用於獲取遊標的
IDBRequest。
例項方法
IDBCursor.advance()-
設定遊標應向前移動其位置的次數。
IDBCursor.continue()-
將遊標沿其方向移動到下一個位置,到鍵與可選的
key引數匹配的項。 IDBCursor.continuePrimaryKey()-
將遊標設定為給定的索引鍵和首要鍵(作為引數提供)。
IDBCursor.delete()-
返回一個
IDBRequest物件,並在單獨的執行緒中刪除遊標位置的記錄,而不改變遊標的位置。這可用於刪除特定記錄。 IDBCursor.update()-
返回一個
IDBRequest物件,並在單獨的執行緒中更新物件儲存中游標當前位置的值。這可用於更新特定記錄。
常量
已棄用:此特性不再推薦。雖然某些瀏覽器可能仍然支援它,但它可能已經從相關的網路標準中刪除,可能正在刪除過程中,或者可能僅為相容性目的而保留。請避免使用它,如果可能,請更新現有程式碼;請參閱本頁底部的相容性表格以指導您的決策。請注意,此特性可能隨時停止工作。
警告: 這些常量不再可用 — 它們在 Gecko 25 中已被移除。您應該直接使用字串常量而不是它們。(Firefox bug 891944)
NEXT:"next":遊標顯示所有記錄,包括重複項。它從鍵範圍的下界開始,並向上移動(鍵順序單調遞增)。NEXTUNIQUE:"nextunique":遊標顯示所有記錄,但不包括重複項。如果存在具有相同鍵的多個記錄,則只檢索迭代到的第一個記錄。它從鍵範圍的下界開始,並向上移動。PREV:"prev":遊標顯示所有記錄,包括重複項。它從鍵範圍的上界開始,並向下移動(鍵順序單調遞減)。PREVUNIQUE:"prevunique":遊標顯示所有記錄,但不包括重複項。如果存在具有相同鍵的多個記錄,則只檢索迭代到的第一個記錄。它從鍵範圍的上界開始,並向下移動。
示例
在這個簡單的片段中,我們建立了一個事務,檢索了一個物件儲存,然後使用遊標遍歷物件儲存中的所有記錄。遊標不需要我們根據鍵選擇資料;我們可以直接獲取所有資料。另外請注意,在迴圈的每次迭代中,您可以使用 cursor.value.foo 從遊標物件下的當前記錄中獲取資料。有關完整的可執行示例,請參閱我們的 IDBCursor 示例(即時檢視示例)。
function displayData() {
const transaction = db.transaction(["rushAlbumList"], "readonly");
const objectStore = transaction.objectStore("rushAlbumList");
objectStore.openCursor().onsuccess = (event) => {
const cursor = event.target.result;
if (cursor) {
const listItem = document.createElement("li");
listItem.textContent = `${cursor.value.albumTitle}, ${cursor.value.year}`;
list.appendChild(listItem);
cursor.continue();
} else {
console.log("Entries all displayed.");
}
};
}
規範
| 規範 |
|---|
| Indexed Database API 3.0 # cursor-interface |
瀏覽器相容性
載入中…
另見
- 使用 IndexedDB
- 開始事務:
IDBDatabase - 使用事務:
IDBTransaction - 設定鍵的範圍:
IDBKeyRange - 檢索和修改資料:
IDBObjectStore - 參考示例:待辦事項通知(即時檢視示例)。