IDBObjectStore.index()
Baseline
Widely available
Cette fonctionnalité est bien établie et fonctionne sur de nombreux appareils et versions de navigateurs. Elle est disponible sur tous les navigateurs depuis juillet 2015.
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
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.
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
Chargement…
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).