---
title: IDBIndex.openKeyCursor()
slug: Web/API/IDBIndex/openKeyCursor
tags:
- API
- IDBIndex
- IndexedDB
- Méthode
- Reference
- openKeyCursor
translation_of: Web/API/IDBIndex/openKeyCursor
---
{{APIRef("IndexedDB")}}
La méthode **`openKeyCursor()`** de {{domxref("IDBIndex")}} renvoie un objet {{domxref("IDBRequest")}} et, dans un _thread_ séparé, crée un curseur sur l'intervalle de clé passé en argument pour l'index courant.
Cette méthode positionne le curseur sur la clé appropriée, dans la direction indiquée :
- si l'intervalle de clé n'est pas défini ou s'il est nul, l'intervalle englobera l'ensemble des clés
- si au moins une clé correspond à l'intervalle de clés, un évènement `success` est déclenché pour la requête qui est renvoyée. La propriété `result` de cet évènement contiendra un objet {{domxref("IDBCursor")}} dont la propriété `value` correspond à l'enregistrement qui a été traduit.
- Si aucun intervalle ne correspond à l'intervalle indiqué, un évènement `error` est déclenché pour la requête.
{{AvailableInWorkers}}
## Syntaxe
var monIndex = objectStore.index("index");
var request = monIndex.openKeyCursor(keyRange,direction);
### Paramètres
- `keyRange` {{optional_inline}}
- : L'{{domxref("IDBKeyRange","intervalle de clé")}} sur lequel se déplace le curseur. On peut passer un clé seule qui sera alors considéré comme une {{domxref("IDBKeyRange.only","intervalle seule")}}. Par défaut le curseur se déplace sur l'ensemble des clés de l'index.
- `direction` {{optional_inline}}
- : La {{domxref("IDBCursor.direction","direction")}} du {{domxref("IDBCursor","curseur")}} qui défini le sens d'itération. par défaut "next".
### Valeur de retour
Un objet {{domxref("IDBRequest")}} sur lequel on peut écouter les évènements associés à l'opération lancée par la méthode.
### Exceptions
Cette méthode peut lever une exception :
Type d'exception |
Description |
TransactionInactiveError |
La transaction pour cet index {{domxref("IDBIndex")}} est
inactive.
|
TypeError |
La valeur du paramètre pour la direction est invalide. |
DataError |
La clé ou l'intervalle de clé fourni contient une clé invalide.
|
InvalidStateError |
L'index {{domxref("IDBIndex")}} a été supprimé ou déplacé.
|
## Exemple
Dans l'exemple suivant on ouvre une transaction puis un magasin d'objet et enfin l'index `lName`.
Ensuite, on itère sur l'ensemble des enregistrements pour en insérer leur clé dans un tableau HTML. En utilisant la méthode {{domxref("IDBIndex.openKeyCursor")}} qui travaille de la même façon que la méthode {{domxref("IDBObjectStore.openKeyCursor")}} de l'{{domxref("IDBObjectStore","accès")}} au magasin d'objet sauf que les enregistrements sont renvoyés dans l'ordre de l'index et non celui du magasin d'objet.
```js
function displayDataByIndex() {
tableEntry.innerHTML = '';
//ouvre un transaction
var transaction = db.transaction(['contactsList'], 'readonly');
//accés au magasin d'objet
var objectStore = transaction.objectStore('contactsList');
//on récupère l'index
var myIndex = objectStore.index('lName');
//un curseur qui itère sur l'index
var request = myIndex.openCursor();
request.onsuccess = function(event) {
var cursor = request.result;
if(cursor) {
// cursor.key la clé de l'enregistrement à la position du curseur
// il n'y as pas de cursor.value contrairement à openCursor()
var tableRow = document.createElement('tr');
tableRow.innerHTML = '' + cursor.key + ' | '
tableEntry.appendChild(tableRow);
//on relance la requête pour la position suivante du curseur
cursor.continue();
} else {
console.log('Toutes les clé ont été affichés.');
}
};
};
```
> **Note :** pour un exemple fonctionnel complet, voir notre [application To-do](https://github.com/mdn/to-do-notifications/) ([exemple](https://mdn.github.io/to-do-notifications/)).
## Spécifications
| Spécification | État | Commentaires |
| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ---------------------------- | ------------ |
| {{SpecName('IndexedDB', '#widl-IDBIndex-openKeyCursor-IDBRequest-any-range-IDBCursorDirection-direction', 'openKeyCursor()')}} | {{Spec2('IndexedDB')}} | |
## Browser compatibility
{{Compat("api.IDBIndex.openKeyCursor")}}
## Voir aussi
- [Utiliser IndexedDB](/fr/docs/Web/API/API_IndexedDB/Using_IndexedDB)
- Initier une connexion : {{domxref("IDBDatabase")}}
- Utiliser les transactions : {{domxref("IDBTransaction")}}
- Définir un intervalle de clés : {{domxref("IDBKeyRange")}}
- Récupérer et modifier les données : {{domxref("IDBObjectStore")}}
- Utiliser les curseurs {{domxref("IDBCursor")}}