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 - 参考示例:待办事项通知(查看实时示例)。