IDBKeyRange

Baseline 已廣泛支援

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

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

IDBKeyRange 介面是 IndexedDB API 的一部分,它表示用於鍵的連續資料型別區間。記錄可以從 IDBObjectStoreIDBIndex 物件中檢索,可以使用鍵或鍵的範圍。您可以透過設定上下界來限制範圍。例如,您可以遍歷 A-Z 值範圍內所有鍵的值。

鍵範圍可以是單個值,也可以是帶有上界和下界(或端點)的範圍。如果鍵範圍同時具有上界和下界,則它被認為是有界的;如果它沒有任何界限,則被認為是無界的。有界的鍵範圍可以是開放的(不包含端點)或閉合的(包含端點)。要檢索某個範圍內的所有鍵,您可以使用以下程式碼結構:

Range 程式碼
所有鍵 ≥ x IDBKeyRange.lowerBound(x)
所有鍵 > x IDBKeyRange.lowerBound(x, true)
所有鍵 ≤ y IDBKeyRange.upperBound(y)
所有鍵 < y IDBKeyRange.upperBound(y, true)
所有鍵 ≥ x && ≤ y IDBKeyRange.bound(x, y)
所有鍵 > x && < y IDBKeyRange.bound(x, y, true, true)
所有鍵 > x && ≤ y IDBKeyRange.bound(x, y, true, false)
所有鍵 ≥ x && < y IDBKeyRange.bound(x, y, false, true)
鍵 = z IDBKeyRange.only(z)

當以下條件都為真時,一個鍵屬於一個鍵範圍:

  • 鍵範圍的下界值是以下情況之一:

    • undefined
    • 小於鍵值
    • 等於鍵值(如果 lowerOpenfalse)。
  • 鍵範圍的上界值是以下情況之一:

    • undefined
    • 大於鍵值
    • 等於鍵值(如果 upperOpenfalse)。

例項屬性

IDBKeyRange.lower 只讀

鍵範圍的下界。

IDBKeyRange.upper 只讀

鍵範圍的上界。

IDBKeyRange.lowerOpen 只讀

如果下界值包含在鍵範圍內,則返回 false。

IDBKeyRange.upperOpen 只讀

如果上界值包含在鍵範圍內,則返回 false。

靜態方法

IDBKeyRange.bound()

建立一個具有上界和下界的新鍵範圍。

IDBKeyRange.only()

建立一個包含單個值的新鍵範圍。

IDBKeyRange.lowerBound()

建立一個僅有下界的鍵範圍。

IDBKeyRange.upperBound()

建立一個具有上界的鍵範圍。

例項方法

IDBKeyRange.includes()

返回一個布林值,指示指定的鍵是否在鍵範圍內。

示例

下面的示例說明了如何使用鍵範圍。這裡我們將 keyRangeValue 宣告為一個介於 "A""F" 之間的範圍。我們開啟一個事務(使用 IDBTransaction)和一個物件儲存,並使用 IDBObjectStore.openCursor 開啟一個遊標,將 keyRangeValue 宣告為其可選的鍵範圍值。這意味著遊標只會檢索鍵在此範圍內的記錄。此範圍包含值 "A""F",因為我們沒有宣告它們應該是開放的界限。如果我們使用 IDBKeyRange.bound("A", "F", true, true);,那麼該範圍將不包括 "A""F",而只包含它們之間的值。

注意:有關一個更完整的示例,允許您嘗試鍵範圍,請檢視我們的 IDBKeyRange-example 倉庫(也可以 線上檢視示例)。

js
function displayData() {
  const keyRangeValue = IDBKeyRange.bound("A", "F");

  const transaction = db.transaction(["fThings"], "readonly");
  const objectStore = transaction.objectStore("fThings");

  objectStore.openCursor(keyRangeValue).onsuccess = (event) => {
    const cursor = event.target.result;
    if (cursor) {
      const listItem = document.createElement("li");
      listItem.textContent = `${cursor.value.fThing}, ${cursor.value.fRating}`;
      list.appendChild(listItem);

      cursor.continue();
    } else {
      console.log("Entries all displayed.");
    }
  };
}

規範

規範
Indexed Database API 3.0
# keyrange

瀏覽器相容性

另見