IDBKeyRange - 表示用于键的某些数据类型的连续间隔

IDBKeyRangeIndexedDB API 的接口,表示用于键的某些数据类型的连续间隔。可以使用键或一系列键从 IDBObjectStoreIDBIndex 对象中检索记录。您可以使用下限和上限来限制范围。例如,您可以迭代值范围 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
    • 小于键的值
    • 如果 lowerOpenfalse,则等于键值。
  • 键范围的上限值为以下值之一:
    • undefined
    • 大于键的值
    • 如果 upperOpenfalse,则等于键值。
注意: 此特性在 Web Worker 中可用。

属性

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()

桌面浏览器兼容性

特性ChromeEdgeFirefoxInternet ExplorerOperaSafari
基础支持

24

23 — 57 webkit

支持

16

10 — 16 moz

101157
Available in workers 支持 支持37 未知 支持 未知
lower

24

23 — 24 webkit

12

16

10 — 16 moz

101157
lowerOpen

24

23 — 24 webkit

12

16

10 — 16 moz

101157
upper

24

23 — 24 webkit

12

16

10 — 16 moz

101157
upperOpen

24

23 — 24 webkit

12

16

10 — 16 moz

101157
bound

24

23 — 24 webkit

12

16

10 — 16 moz

101157
includes52 支持47 未知3910.1
lowerBound

24

23 — 24 webkit

12

16

10 — 16 moz

101157
only

24

23 — 24 webkit

12

16

10 — 16 moz

101157
upperBound

24

23 — 24 webkit

12

16

10 — 16 moz

101157

移动浏览器兼容性

特性AndroidChrome for AndroidEdge mobileFirefox for AndroidIE mobileOpera AndroidiOS Safari
基础支持 支持 支持 未知22 未知228
Available in workers 支持 支持 支持37 未知 支持 未知
lower 支持 支持 支持22 未知228
lowerOpen 支持 支持 未知22 未知228
upper 支持 支持 支持22 未知228
upperOpen 支持 支持 支持22 未知228
bound 支持 支持 支持22 未知228
includes5252 支持 未知 未知3910.1
lowerBound 支持 支持 支持22 未知228
only 支持 支持 支持22 未知228
upperBound 支持 支持 支持22 未知228

1. 部分的

相关链接