IDBIndex.get()
==============

La méthode **`get()`** de l'interface `IDBIndex` fait une requête (`IDBRequest`) pour renvoyer le premier enregistrement correspondant à la clé ou l'intervalle de clé `IDBKeyRange` du magasin d'objet suivant l'index.

**Note:** Cette fonctionnalité est disponible via les Web Workers

Syntaxe
-------


```js
var request = myIndex.get(key);
```

Paramètre
---------

`key`

la clé ou l'intervalle de clé (`IDBKeyRange`) de l'enregistrement dont on cherche la valeur.

Valeur de retour
----------------

Une requête (`IDBRequest`)

La propriété "result" (`IDBRequest.result`) de cette requête renvoie en cas de succès le premier enregistrement correspondant à la clé ou à l'intervalle de clé. Le résultat contient l'enregistrement { key: la clé, value: un\_clone\_structuré\_de\_la\_valeur }.

Exceptions
----------

`TransactionInactiveError`

Cette exception ( `DOMException`) est levée si la transaction (`IDBTransaction`) dont dépend l'accès (`IDBObjectStore`) au magasin d'objet de cet index est inactive.

`DataError`

Cette exception (`DOMException`) est levée si la clé ou l'intervalle de clé (`IDBKeyRange`) est invalide.

`InvalidStateError`

Cette exception (`DOMException`) est levée si l'index à été supprimé.

Exemple
-------

Dans l'exemple suivant on ouvre une transaction puis un magasin d'objet et enfin l'index `lName`.

Le code `myIndex.get('Bungle')` renvoie une requête qui cherche sur l'index un enregistrement dont la clé `lName` est `Bungle`. En cas de sucés le résultat de la requête qui contient l'enregistrement est affiché sur la console.

Finalement, on itère sur tous les enregistrements pour en insérer les données dans un tableau HTML. En utilisant la méthode `IDBIndex.openCursor` qui travaille de la même façon que la méthode `IDBObjectStore.openCursor` de l'accès (`IDBObjectStore`) 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");
  //requête de recherche
  var getRequest = myIndex.get("Bungle");
  //en cas de succès
  getRequest.onsuccess = function () {
    console.log(getRequest.result);
  };

  //un curseur qui itère sur l'index
  myIndex.openCursor().onsuccess = function (event) {
    var cursor = event.target.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 de travail complet, voir notre To-do Notifications app (view example live).

Spécifications
--------------

| Specification |
| --- |
| Indexed Database API 3.0 # ref-for-dom-idbindex-get① |

Compatibilité des navigateurs
-----------------------------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

Voir aussi
----------

* `Utiliser IndexedDB`
* `Débuter une connexion`
* `Utilisé les transactions`
* `Définir l'intervalle des clés`
* `Accès aux magasins d'objets`
* `Utiliser les curseur`
* Exemple de référence: To-do Notifications (view example live.)