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 通知 (在线查看实例。)