IDBKeyRange

注意: 此功能在 Web Workers 中可用。

IDBKeyRange 接口是 IndexedDB API 的一部分,它表示用于键的一些数据类型上的连续间隔。记录可以从 IDBObjectStoreIDBIndex 对象中使用键或键范围检索。可以使用下限和上限来限制范围。例如,可以迭代键在值范围 A–Z 内的所有值。

键范围可以是单个值,也可以是带有上限和下限或端点的范围。如果键范围同时具有上限和下限,则它为有界;如果它没有边界,则它为无界。有界键范围可以是开区间(端点被排除在外)或闭区间(端点被包含在内)。要检索某个范围内的所有键,可以使用以下代码结构

范围 代码
所有键 ≥ 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
    • 小于键值
    • 如果 lowerOpenfalse,则等于键值。
  • 键范围的上限值是以下之一
    • undefined
    • 大于键值
    • 如果 upperOpenfalse,则等于键值。

实例属性

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-示例 代码库(也可以查看示例的实时运行。)

js
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

浏览器兼容性

BCD 表格仅在浏览器中加载

另请参阅