IDBObjectStore.index()

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since September 2021.

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

Voir aussi