--- title: IDBObjectStore.index() slug: Web/API/IDBObjectStore/index tags: - API - IDBObjectStore - IndexedDB - Méthode - Reference translation_of: Web/API/IDBObjectStore/index ---
{{APIRef("IndexedDB")}}

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}}

Syntaxe

objectStore.index(nomIndex);

Paramètres

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

Valeur de retour

Un objet {{domxref("IDBIndex")}} qui permet d'accéder à l'index.

Exceptions

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).

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 {{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écifications

Spécification État Commentaires
{{SpecName('IndexedDB', '#widl-IDBObjectStore-index-IDBIndex-DOMString-name', 'index()')}} {{Spec2('IndexedDB')}}  

Compatibilité des navigateurs

{{CompatibilityTable}}
Fonctionnalité Chrome Edge Firefox (Gecko) Internet Explorer Opera Safari (WebKit)
Support simple 23{{property_prefix("webkit")}}
24
{{CompatVersionUnknown}} 10 {{property_prefix("moz")}}
{{CompatGeckoDesktop("16.0")}}
10, partial 15 7.1
Disponible dans les web workers {{CompatVersionUnknown}} {{CompatUnknown}} {{CompatGeckoMobile("37.0")}} {{CompatUnknown}} {{CompatVersionUnknown}} {{CompatUnknown}}
Fonctionnalité Android Webview Android Edge Firefox Mobile (Gecko) IE Phone Opera Mobile Safari Mobile Chrome pour Android
Support simple 4.4 {{CompatVersionUnknown}} {{CompatVersionUnknown}} {{CompatGeckoMobile("22.0")}} 10 22 8 {{CompatVersionUnknown}}
Disponible dans les web workers {{CompatVersionUnknown}} {{CompatVersionUnknown}} {{CompatUnknown}} {{CompatGeckoMobile("37.0")}} {{CompatUnknown}} {{CompatVersionUnknown}} {{CompatUnknown}} {{CompatVersionUnknown}}

Voir aussi