--- title: IDBKeyRange slug: Web/API/IDBKeyRange tags: - API - Database - IDBKeyRange - IndexedDB - Interface - NeedsTranslation - Reference - Storage - TopicStub translation_of: Web/API/IDBKeyRange ---
{{APIRef("IndexedDB")}}
IndexedDB API 的IDBKeyRange
接口表示一些数据类型上的键的连续间隔。可以使用一个键或某个范围的键从{{domxref("IDBObjectStore")}} 和{{domxref("IDBIndex")}} 对象中检索记录。您也可以指定键的上界和下界来限制范围。例如,您可以遍历值范围a - z中的键的所有值。
键范围可以是单个值,也可以是具有上界、下界或端点的范围。如果键范围同时有上界或下界,那么它是有界的,否则是无界的。有界键范围可以是开放的(不包含端点)或闭合的(包含了端点)。要检索一定范围内的所有键值,可以使用以下的代码结构:
Range | Code |
---|---|
All keys ≤ x | {{domxref("IDBKeyRange.upperBound")}}(x) |
All keys < x | {{domxref("IDBKeyRange.upperBound")}}(x, true) |
All keys ≥ y | {{domxref("IDBKeyRange.lowerBound")}}(y) |
All keys > y | {{domxref("IDBKeyRange.lowerBound")}}(y, true) |
All keys ≥ x && ≤ y | {{domxref("IDBKeyRange.bound")}}(x, y) |
All keys > x &&< y | {{domxref("IDBKeyRange.bound")}}(x, y, true, true) |
All keys > x && ≤ y | {{domxref("IDBKeyRange.bound")}}(x, y, true, false) |
All keys ≥ x &&< y | {{domxref("IDBKeyRange.bound")}}(x, y, false, true) |
The key = z | {{domxref("IDBKeyRange.only")}}(z) |
如果以下条件为true,则键包含在键范围中:
undefined
lowerOpen属性
为false
.undefined
upperOpen属性为
false
.{{AvailableInWorkers}}
以下示例用以说明该如果使用键范围。在此我们将 keyRangeValue
声明为A~F之间的范围。我们打开一个事务 (使用 {{domxref("IDBTransaction")}}) 和一个对象存储, 并用 {{domxref("IDBObjectStore.openCursor")}}打开一个游标,其中keyRangeValue
是一个可选的键范围值,指定之后游标将只检索键在该范围内的记录。这里的键范围包括了“A”和“F”,因为我们还没声明键范围为开放边界。如果我们使用 IDBKeyRange.bound("A", "F", true, true);
,那么这个键范围将不包括“A”和“F”,只包含它们之间的值。
Note: For a more complete example allowing you to experiment with key range, have a look at our IDBKeyRange-example repo (view the example live too.)
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('Entries all displayed.'); } }; }
Specification | Status | Comment |
---|---|---|
{{SpecName('IndexedDB', '#idl-def-IDBKeyRange', 'IDBKeyRange')}} | {{Spec2('IndexedDB')}} | Initial definition. |
{{SpecName('IndexedDB 2', '#keyrange', 'IDBKeyRange')}} | {{Spec2('IndexedDB 2')}} | Adds includes() . |
{{Compat("api.IDBKeyRange")}}