IDBObjectStore.index()
======================

La méthode **`index()`**, rattachée à l'interface `IDBObjectStore`, permet d'ouvrir un index sur le magasin d'objet courant pour, par exemple, renvoyer une liste d'enregistrements triés par cet index grâce à un curseur.

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

Syntaxe
-------


```js
objectStore.index(nomIndex);
```

### Paramètres

`nomIndex`

Le nom de l'index qu'on souhaite ouvrir.

### Valeur de retour

Un objet `IDBIndex` qui permet d'accéder à l'index.

### Exceptions

Cette méthode peut déclencher une exception `DOMException` ayant l'un des types suivants :

| Exception | Description |
| --- | --- |
| `InvalidStateError` | L'objet correspondant au magasin d'objet a été supprimé ou la transaction a été clôturée. |
| `NotFoundError` | Il n'existe pas d'index pour ce nom dans la base de données (la recherche est sensible à la casse). |

Exemples
--------

Dans l'exemple qui suit, on ouvre une transaction sur un magasin d'objet et on accède à l'index `lName` de la base de données. Ensuite, on ouvre un curseur sur l'index grâce à la méthode `IDBIndex.openCursor` — cela fonctionne de la même façon que d'ouvrir un curseur à même le magasin d'objet grâce à `IDBObjectStore.openCursor` sauf que, cette fois, les enregistrements sont renvoyés triés selon l'index et non selon la clé primaire.

Enfin, on parcourt chaque enregistrement pour l'ajouter dans un tableau HTML.


```js
function displayDataByIndex() {
  tableEntry.innerHTML = "";
  var transaction = db.transaction(["contactsList"], "readonly");
  var objectStore = transaction.objectStore("contactsList");

  var myIndex = objectStore.index("lName");
  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("Éléments affichés.");
    }
  };
}
```


**Note :** pour un exemple fonctionnel complet, voir notre exemple sur GitHub (la démonstration associée).

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

| Specification |
| --- |
| Indexed Database API 3.0 # dom-idbobjectstore-index |

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

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

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

* Utiliser IndexedDB
* Initier une connexion : `IDBDatabase`
* Utiliser les transactions : `IDBTransaction`
* Définir un intervalle de clés : `IDBKeyRange`
* Récupérer et modifier les données : `IDBObjectStore`
* Utiliser les curseurs `IDBCursor`
* Exemple de référence : To-do Notifications (exemple *live*).