IDBKeyRange - 表示用于键的某些数据类型的连续间隔
IDBKeyRange 是 IndexedDB API 的接口,表示用于键的某些数据类型的连续间隔。可以使用键或一系列键从 IDBObjectStore 和 IDBIndex 对象中检索记录。您可以使用下限和上限来限制范围。例如,您可以迭代值范围 A-Z 中的键的所有值。
键范围可以是单个值,也可以是具有上限和下限或端点的范围。如果键范围同时具有上限和下限,则它是_有界_;如果它没有边界,它是_无界_。有界键范围可以是打开(端点被排除)或关闭(包括端点)。要检索特定范围内的所有键,可以使用以下代码构造:
| 范围 | 代码 |
|---|---|
| 所有 ≤ x 的键 | IDBKeyRange.upperBound(x) |
| 所有 < x 的键 | IDBKeyRange.upperBound(x, true) |
| 所有 ≥ y 的键 | IDBKeyRange.lowerBound(y) |
| 所有 > y 的键 | IDBKeyRange.lowerBound(y, true) |
| 所有 > 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-实例 仓库(查看在线实例。)
function displayData() {
var keyRangeValue = IDBKeyRange.bound("A", "F");
var transaction = db.transaction(['fThings'], 'readonly');
var objectStore = transaction.objectStore('fThings');
objectStore.openCursor(keyRangeValue).onsuccess = function(event) {
var cursor = event.target.result;
if(cursor) {
var listItem = document.createElement('li');
listItem.innerHTML = '<strong>' + cursor.value.fThing + '</strong>, ' + cursor.value.fRating;
list.appendChild(listItem);
cursor.continue();
} else {
console.log('所有的条目都显示出来了');
}
};
}
规范
| 规范 | 状态 | 备注 |
|---|---|---|
| Indexed Database API IDBKeyRange 的定义 |
推荐 | 初始定义。 |
| Indexed Database API 2.0 IDBKeyRange 的定义 |
编者的草案 | 添加了 includes()。 |
桌面浏览器兼容性
| 特性 | Chrome | Edge | Firefox | Internet Explorer | Opera | Safari |
|---|---|---|---|---|---|---|
| 基础支持 | 24 23 — 57 webkit | 支持 | 16 10 — 16 moz | 101 | 15 | 7 |
| Available in workers | 支持 | 支持 | 37 | 未知 | 支持 | 未知 |
lower | 24 23 — 24 webkit | 12 | 16 10 — 16 moz | 101 | 15 | 7 |
lowerOpen | 24 23 — 24 webkit | 12 | 16 10 — 16 moz | 101 | 15 | 7 |
upper | 24 23 — 24 webkit | 12 | 16 10 — 16 moz | 101 | 15 | 7 |
upperOpen | 24 23 — 24 webkit | 12 | 16 10 — 16 moz | 101 | 15 | 7 |
bound | 24 23 — 24 webkit | 12 | 16 10 — 16 moz | 101 | 15 | 7 |
includes | 52 | 支持 | 47 | 未知 | 39 | 10.1 |
lowerBound | 24 23 — 24 webkit | 12 | 16 10 — 16 moz | 101 | 15 | 7 |
only | 24 23 — 24 webkit | 12 | 16 10 — 16 moz | 101 | 15 | 7 |
upperBound | 24 23 — 24 webkit | 12 | 16 10 — 16 moz | 101 | 15 | 7 |
移动浏览器兼容性
| 特性 | Android | Chrome for Android | Edge mobile | Firefox for Android | IE mobile | Opera Android | iOS Safari |
|---|---|---|---|---|---|---|---|
| 基础支持 | 支持 | 支持 | 未知 | 22 | 未知 | 22 | 8 |
| Available in workers | 支持 | 支持 | 支持 | 37 | 未知 | 支持 | 未知 |
lower | 支持 | 支持 | 支持 | 22 | 未知 | 22 | 8 |
lowerOpen | 支持 | 支持 | 未知 | 22 | 未知 | 22 | 8 |
upper | 支持 | 支持 | 支持 | 22 | 未知 | 22 | 8 |
upperOpen | 支持 | 支持 | 支持 | 22 | 未知 | 22 | 8 |
bound | 支持 | 支持 | 支持 | 22 | 未知 | 22 | 8 |
includes | 52 | 52 | 支持 | 未知 | 未知 | 39 | 10.1 |
lowerBound | 支持 | 支持 | 支持 | 22 | 未知 | 22 | 8 |
only | 支持 | 支持 | 支持 | 22 | 未知 | 22 | 8 |
upperBound | 支持 | 支持 | 支持 | 22 | 未知 | 22 | 8 |
1. 部分的
相关链接
- 使用 IndexedDB
- 启动事务:
IDBDatabase - 使用事务:
IDBTransaction - 设置一系列键:
IDBKeyRange - 检索并更改数据:
IDBObjectStore - 使用游标:
IDBCursor - 参考实例:To-do 通知 (在线查看实例。)