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

Report problems with this compatibility data on GitHub
desktopmobile
Chrome
Edge
Firefox
Opera
Safari
Chrome Android
Firefox for Android
Opera Android
Safari on iOS
Samsung Internet
WebView Android
WebView on iOS
index

Legend

Tip: you can click/tap on a cell for more information.

Full support
Full support

Voir aussi