--- title: IDBIndex.openCursor() slug: Web/API/IDBIndex/openCursor tags: - API - IDBIndex - IndexedDB - Méthode - Reference - openCursor translation_of: Web/API/IDBIndex/openCursor ---
La méthode openCursor()
de l'interface {{domxref("IDBIndex")}} renvoie un objet {{domxref("IDBRequest")}} et, dans un thread séparé, crée un curseur sur l'intervalle de clé fourni en argument.
La méthode la positionne le curseur de façon approprié, selon la direction indiquée :
success
est toujours déclenché :
result
de l'évènement contient le nouvel objet {{domxref("IDBCursor")}} et la valeur (value
) de ce curseur est un clône de la valeur référencéeresult
de l'évènement vaudra null
.{{AvailableInWorkers}}
var request = myIndex.openCursor(keyRange,direction);
keyRange
{{optional_inline}}direction
{{optional_inline}}direction
de l'objet {{domxref("IDBCursor.direction")}}). La valeur par défaut est "next"
.Un objet {{domxref("IDBRequest")}} sur lequel les évènements associés à l'opération seront déclenchés.
Cette méthode peut déclencher une {{domxref("DOMException")}} dont le type peut être l'un des suivant :
Type d'exception | Description |
---|---|
TransactionInactiveError | La transaction pour cet index 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 a été supprimé ou déplacé. |
Dans l'exemple suivant, on ouvre une transaction puis un magasin d'objet et enfin l'index lName
.
Ensuite, on parcourt les enregistrements pour insérer les données dans un tableau HTML. En utilisant la méthode {{domxref("IDBIndex.openCursor")}} qui travaille de la même façon que la méthode {{domxref("IDBObjectStore.openCursor")}} 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.
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) { var tableRow = document.createElement('tr'); tableRow.innerHTML = '<td>' + cursor.value.id + '</td>' + '<td>' + cursor.value.lName + '</td>' + '<td>' + cursor.value.fName + '</td>' + '<td>' + cursor.value.jTitle + '</td>' + '<td>' + cursor.value.company + '</td>' + '<td>' + cursor.value.eMail + '</td>' + '<td>' + cursor.value.phone + '</td>' + '<td>' + cursor.value.age + '</td>'; tableEntry.appendChild(tableRow); cursor.continue(); } else { console.log('Tous les enregistrements ont été affichés.'); } }; };
Note : pour un exemple fonctionnel complet, voir notre application To-do (exemple).
Spécification | État | Commentaires |
---|---|---|
{{SpecName('IndexedDB', '#widl-IDBIndex-openCursor-IDBRequest-any-range-IDBCursorDirection-direction', 'openCursor()')}} | {{Spec2('IndexedDB')}} |
{{Compat("api.IDBIndex.openCursor")}}