aboutsummaryrefslogtreecommitdiff
path: root/files/zh-cn/web/api/idbkeyrange/index.html
blob: af65cfbb115068a653df62810f69db2fd2fd6fdf (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
---
title: IDBKeyRange
slug: Web/API/IDBKeyRange
tags:
  - API
  - Database
  - IDBKeyRange
  - IndexedDB
  - Interface
  - NeedsTranslation
  - Reference
  - Storage
  - TopicStub
translation_of: Web/API/IDBKeyRange
---
<p>{{APIRef("IndexedDB")}}</p>

<div>
<p><a href="/en/IndexedDB" title="en/IndexedDB">IndexedDB API</a> 的<strong><code>IDBKeyRange</code></strong>接口表示一些数据类型上的键的连续间隔。可以使用一个键或某个范围的键从{{domxref("IDBObjectStore")}}{{domxref("IDBIndex")}} 对象中检索记录。您也可以指定键的上界和下界来限制范围。例如,您可以遍历值范围a - z中的键的所有值。</p>
</div>

<p>键范围可以是单个值,也可以是具有上界、下界或端点的范围。如果键范围同时有上界或下界,那么它是有界的,否则是无界的。有界键范围可以是开放的(不包含端点)或闭合的(包含了端点)。要检索一定范围内的所有键值,可以使用以下的代码结构:</p>

<table class="standard-table">
 <thead>
  <tr>
   <th scope="col">Range</th>
   <th scope="col">Code</th>
  </tr>
  <tr>
   <td>All keys ≤ <strong>x</strong></td>
   <td>{{domxref("IDBKeyRange.upperBound")}}<code>(<strong>x</strong>)</code></td>
  </tr>
  <tr>
   <td>All keys &lt; <strong>x</strong></td>
   <td>{{domxref("IDBKeyRange.upperBound")}}<code>(<strong>x</strong>, true) </code></td>
  </tr>
  <tr>
   <td>All keys ≥<strong> y</strong></td>
   <td>{{domxref("IDBKeyRange.lowerBound")}}<code>(<strong>y</strong>)</code></td>
  </tr>
  <tr>
   <td>All keys &gt;<strong> y</strong></td>
   <td>{{domxref("IDBKeyRange.lowerBound")}}<code>(<strong>y</strong>, true)</code></td>
  </tr>
  <tr>
   <td>All keys ≥ <strong>x</strong> &amp;&amp;<strong>y</strong></td>
   <td>{{domxref("IDBKeyRange.bound")}}<code>(<strong>x</strong>, <strong>y</strong>)</code></td>
  </tr>
  <tr>
   <td>All keys &gt; <strong>x</strong> &amp;&amp;&lt; <strong>y</strong></td>
   <td>{{domxref("IDBKeyRange.bound")}}<code>(<strong>x</strong>, <strong>y</strong>, true, true)</code></td>
  </tr>
  <tr>
   <td>All keys &gt; <strong>x</strong> &amp;&amp;<strong>y</strong></td>
   <td>{{domxref("IDBKeyRange.bound")}}<code>(<strong>x</strong>, <strong>y</strong>, true, false)</code></td>
  </tr>
  <tr>
   <td>All keys ≥ <strong>x</strong> &amp;&amp;&lt; <strong>y</strong></td>
   <td>{{domxref("IDBKeyRange.bound")}}<code>(<strong>x</strong>, <strong>y</strong>, false, true)</code></td>
  </tr>
  <tr>
   <td>The key = <strong>z</strong></td>
   <td>{{domxref("IDBKeyRange.only")}}<code>(<strong>z</strong>)</code></td>
  </tr>
 </thead>
</table>

<p>如果以下条件为true,则键包含在键范围中:</p>

<ul>
 <li>键范围的下界值为以下值或符合以下条件之一时:
  <ul>
   <li><code>undefined</code></li>
   <li>低于正在被鉴定的键值</li>
   <li>等于正在被鉴定的键值,且键范围的<code>lowerOpen属性</code><code>false</code>.</li>
  </ul>
 </li>
 <li>键范围的上界值为以下值或符合以下条件之一时:
  <ul>
   <li><code>undefined</code></li>
   <li>高于正在被鉴定的键值</li>
   <li>等于正在被鉴定的键值,且键范围的<code>upperOpen<font face="Arial, x-locale-body, sans-serif"><span style="background-color: #ffffff;">属性为</span></font></code><code>false</code>.</li>
  </ul>
 </li>
</ul>

<p>{{AvailableInWorkers}}</p>

<h2 id="Properties">Properties</h2>

<dl>
 <dt>{{domxref("IDBKeyRange.lower")}} {{readonlyInline}}</dt>
 <dd>键范围的下界</dd>
 <dt>{{domxref("IDBKeyRange.upper")}} {{readonlyInline}}</dt>
 <dd>键范围的上界</dd>
 <dt>{{domxref("IDBKeyRange.lowerOpen")}} {{readonlyInline}}</dt>
 <dd>如果下界值包含在键范围内,则返回false。</dd>
 <dt>{{domxref("IDBKeyRange.upperOpen")}} {{readonlyInline}}</dt>
 <dd>如果上界值包含在键范围内,则返回false。</dd>
</dl>

<h2 id="Methods">Methods</h2>

<h3 id="Static_methods">Static methods</h3>

<dl>
 <dt>{{domxref("IDBKeyRange.bound()")}}</dt>
 <dd>指定上界和下界来创建一个新的键范围</dd>
 <dt>{{domxref("IDBKeyRange.only()")}}</dt>
 <dd>指定单个键值来创建一个新的键范围</dd>
 <dt>{{domxref("IDBKeyRange.lowerBound()")}}</dt>
 <dd>指定结果集的下界来创建一个新的键范围</dd>
 <dt>{{domxref("IDBKeyRange.upperBound()")}}</dt>
 <dd>指定结果集的上界来创建一个新的键范围</dd>
</dl>

<h3 id="Instance_methods">Instance methods</h3>

<dl>
 <dt>{{domxref("IDBKeyRange.includes()")}}</dt>
 <dd>返回一个布尔值来表示指定的键是否在键范围内。</dd>
</dl>

<h2 id="Examples">Examples</h2>

<p>以下示例用以说明该如果使用键范围。在此我们将 <code>keyRangeValue</code> 声明为A~F之间的范围。我们打开一个事务 (使用 {{domxref("IDBTransaction")}}) 和一个对象存储, 并用 {{domxref("IDBObjectStore.openCursor")}}打开一个游标,其中<code>keyRangeValue</code>是一个可选的键范围值,指定之后游标将只检索键在该范围内的记录。这里的键范围包括了“A”和“F”,因为我们还没声明键范围为开放边界。如果我们使用 <span style="background-color: #fafbfc; font-family: consolas,monaco,andale mono,monospace; font-size: 1rem; line-height: 19px; white-space: pre;"><code>IDBKeyRange.bound("A", "F", true, true);</code>,那么这个键范围将不包括</span>“A”和“F”,只包含它们之间的值。</p>

<div class="note">
<p><strong>Note</strong>: For a more complete example allowing you to experiment with key range, have a look at our <a href="https://github.com/mdn/indexeddb-examples/tree/master/idbkeyrange">IDBKeyRange-example</a> repo (<a href="https://mdn.github.io/indexeddb-examples/idbkeyrange/">view the example live too</a>.)</p>
</div>

<pre class="brush: js notranslate">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 = '&lt;strong&gt;' + cursor.value.fThing + '&lt;/strong&gt;, ' + cursor.value.fRating;
      list.appendChild(listItem);

      cursor.continue();
    } else {
      console.log('Entries all displayed.');
    }
  };
}</pre>

<h2 id="Specifications">Specifications</h2>

<table class="standard-table">
 <tbody>
  <tr>
   <th scope="col">Specification</th>
   <th scope="col">Status</th>
   <th scope="col">Comment</th>
  </tr>
  <tr>
   <td>{{SpecName('IndexedDB', '#idl-def-IDBKeyRange', 'IDBKeyRange')}}</td>
   <td>{{Spec2('IndexedDB')}}</td>
   <td>Initial definition.</td>
  </tr>
  <tr>
   <td>{{SpecName('IndexedDB 2', '#keyrange', 'IDBKeyRange')}}</td>
   <td>{{Spec2('IndexedDB 2')}}</td>
   <td>Adds <code>includes()</code>.</td>
  </tr>
 </tbody>
</table>

<h2 id="Browser_compatibility" name="Browser_compatibility">Browser compatibility</h2>

<div>


<p>{{Compat("api.IDBKeyRange")}}</p>
</div>

<h2 id="See_also">See also</h2>

<ul>
 <li><a href="/en-US/docs/Web/API/IndexedDB_API/Using_IndexedDB">Using IndexedDB</a></li>
 <li>Starting transactions: {{domxref("IDBDatabase")}}</li>
 <li>Using transactions: {{domxref("IDBTransaction")}}</li>
 <li>Setting a range of keys: {{domxref("IDBKeyRange")}}</li>
 <li>Retrieving and making changes to your data: {{domxref("IDBObjectStore")}}</li>
 <li>Using cursors: {{domxref("IDBCursor")}}</li>
 <li>Reference example: <a class="external" href="https://github.com/mdn/to-do-notifications/tree/gh-pages">To-do Notifications</a> (<a class="external" href="http://mdn.github.io/to-do-notifications/">view example live</a>.)</li>
</ul>