IDBCursor

Baseline 已廣泛支援

此特性已相當成熟,可在許多裝置和瀏覽器版本上使用。自 ⁨2015 年 7 月⁩以來,各瀏覽器均已提供此特性。

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

注意: 不要與 IDBCursorWithValue 混淆,它只是一個帶有額外 value 屬性的 IDBCursor 介面。

IDBCursor 介面是 IndexedDB API 的一部分,它代表一個用於遍歷或迭代資料庫中多個記錄的 遊標

遊標有一個源,指示它正在遍歷哪個索引或物件儲存。它在範圍內的位置,並沿鍵順序遞增或遞減的方向移動。遊標使應用程式能夠非同步處理遊標範圍內的所有記錄。

您可以同時擁有無限數量的遊標。對於給定的遊標,您始終會獲得相同的 IDBCursor 物件。操作將在底層索引或物件儲存上執行。

例項屬性

注意: IDBCursorWithValue 是一個帶有額外 value 屬性的 IDBCursor 介面。

IDBCursor.source 只讀

返回遊標正在迭代的 IDBObjectStoreIDBIndex。即使遊標當前正在迭代、已迭代到末尾,或者其事務不活躍,此函式也永遠不會返回 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 示例即時檢視示例)。

js
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

瀏覽器相容性

另見