--- title: IDBIndex.openCursor() slug: Web/API/IDBIndex/openCursor tags: - API - IDBIndex - IndexedDB - Méthode - Reference - openCursor translation_of: Web/API/IDBIndex/openCursor ---
{{APIRef("IndexedDB")}}

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 :

{{AvailableInWorkers}}

Syntaxe

var request = myIndex.openCursor(keyRange,direction);

Paramètres

keyRange {{optional_inline}}
L'intervalle de clé ({{domxref("IDBKeyRange")}}) sur lequel se déplace le curseur. Si aucun argument n'est passé, la valeur par défaut sera un intervalle qui englobe tous les enregistrements du magasin d'objets.
direction {{optional_inline}}
La direction dans laquelle se déplace le curseur (la propriété direction de l'objet {{domxref("IDBCursor.direction")}}). La valeur par défaut est "next".

Valeur de retour

Un objet {{domxref("IDBRequest")}} sur lequel les évènements associés à l'opération seront déclenchés.

Exceptions

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é.

Exemple

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écifications

Spécification État Commentaires
{{SpecName('IndexedDB', '#widl-IDBIndex-openCursor-IDBRequest-any-range-IDBCursorDirection-direction', 'openCursor()')}} {{Spec2('IndexedDB')}}  

Compatibilité des navigateurs

{{Compat("api.IDBIndex.openCursor")}}

Voir aussi