IDBKeyRange
注意:此功能在 Web Workers 中可用。
IDBKeyRange 介面是 IndexedDB API 的一部分,它表示用於鍵的連續資料型別區間。記錄可以從 IDBObjectStore 和 IDBIndex 物件中檢索,可以使用鍵或鍵的範圍。您可以透過設定上下界來限制範圍。例如,您可以遍歷 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- 小於鍵值
- 等於鍵值(如果
lowerOpen為false)。
-
鍵範圍的上界值是以下情況之一:
undefined- 大於鍵值
- 等於鍵值(如果
upperOpen為false)。
例項屬性
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 倉庫(也可以 線上檢視示例)。
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 |
瀏覽器相容性
載入中…
另見
- 使用 IndexedDB
- 開始事務:
IDBDatabase - 使用事務:
IDBTransaction - 檢索和修改資料:
IDBObjectStore - 使用遊標:
IDBCursor - 參考示例:待辦事項通知(檢視即時示例)。