IDBIndex.getKey()

La méthode getKey(), rattachée à l'interface IDBIndex, renvoie un objet IDBRequest et, dans un thread séparé, récupère la clé associée ou la clé primaire si l'argument passé à la fonction est un intervalle IDBKeyRange.

Si la méthode trouve une clé, ce sera alors la propriété result de la requête renvoyée. Seule la clé primaire de l'enregistrement est renvoyée (pour obtenir l'ensemble de l'enregistrement, on utilisera IDBIndex.get).

Note : Cette fonctionnalité est disponible via les Web Workers.

Syntaxe

js
var myIndex = objectStore.index("index");
var request = myIndex.getKey(key);

Paramètres

key Facultatif

Une clé ou un intervalle IDBKeyRange qui identifie l'enregistrement dont on souhaite obtenir la clé. Si la valeur vaut null ou si elle est absente, le navigateur utilisera un intervalle de clé sans limite.

Valeur de retour

Un objet IDBRequest qui recevra les différents évènements relatifs à l'opération qui est déclenchée.

Exceptions

Cette méthode peut déclencher une exception. Celle-ci peut avoir l'un des types suivants :

Exception Description
TransactionInactiveError La transaction rattachée à cet IDBIndex est inactive.
DataError

La clé ou l'intervalle de clés qui est fourni contient une clé invalide.

InvalidStateError L'index a été supprimé ou déplacé.

Exemples

Dans l'exemple qui suit, on ouvre une transaction et un magasin d'objets. Ensuite on récupère l'index lName sur cette base de donnée. On ouvre alors un curseur sur l'index grâce à la méthode IDBIndex.openCursor (cela fonctionne de la même façon que IDBObjectStore.openCursor sauf que les enregistrements sont triés selon l'index et pas selon la clé primaire).

myIndex.getKey('Bungle') est ensuite utilisé afin d'obtenir la clé primaire de l'enregistrement pour lequel lName vaut Bungle. Le résultat de cette requête est imprimé dans la console lorsque la fonction de rappel (callback) de succès est déclenché.

Enfin, on parcourt les enregistrements pour remplir un tableau HTML. Le dépôt indexeddb-examples contient un exemple complet (voir l'exemple en direct).

js
function displayDataByIndex() {
  tableEntry.innerHTML = "";
  var transaction = db.transaction(["contactsList"], "readonly");
  var objectStore = transaction.objectStore("contactsList");
  var myIndex = objectStore.index("lName");
  var getKeyRequest = myIndex.getKey("Bungle");
  getKeyRequest.onsuccess = function () {
    console.log(getKeyRequest.result);
  };

  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("Les éléments sont affichés.");
    }
  };
}

Spécifications

Specification
Indexed Database API 3.0
# ref-for-dom-idbindex-getkey①

Compatibilité des navigateurs

BCD tables only load in the browser

Voir aussi