--- title: IDBObjectStore.index() slug: Web/API/IDBObjectStore/index tags: - API - IDBObjectStore - IndexedDB - Méthode - Reference translation_of: Web/API/IDBObjectStore/index ---
La méthode index()
, rattachée à l'interface {{domxref("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.
{{AvailableInWorkers}}
objectStore.index(nomIndex);
nomIndex
Un objet {{domxref("IDBIndex")}} qui permet d'accéder à l'index.
Cette méthode peut déclencher une exception {{domxref("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). |
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 {{domxref("IDBIndex.openCursor")}} — cela fonctionne de la même façon que d'ouvrir un curseur à même le magasin d'objet grâce à {{domxref("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.
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écification | État | Commentaires |
---|---|---|
{{SpecName('IndexedDB', '#widl-IDBObjectStore-index-IDBIndex-DOMString-name', 'index()')}} | {{Spec2('IndexedDB')}} |
{{Compat("api.IDBObjectStore.index")}}