IDBIndex.openCursor()
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 openCursor() de l'interface IDBIndex renvoie un objet IDBRequest et, dans un thread séparé, crée un curseur sur l'intervalle de clé fourni en argument.
La méthode la positionne le curseur de façon approprié, selon la direction indiquée :
- Si aucun intervalle de clé n'est spécifié ou qu'il vaut
null, l'intervalle résultant contiendra l'ensemble des enregistrements - L'évènement
successest toujours déclenché :- Si un enregistrement est trouvé la propriété
resultde l'évènement contient le nouvel objetIDBCursoret la valeur (value) de ce curseur est un clône de la valeur référencée - Si aucun enregistrement n'est trouvé la propriété
resultde l'évènement vaudranull.
- Si un enregistrement est trouvé la propriété
Note : Cette fonctionnalité est disponible via les Web Workers.
Syntaxe
var request = myIndex.openCursor(keyRange, direction);
Paramètres
keyRangeFacultatif-
L'intervalle de clé (
IDBKeyRange) sur lequel se déplace le curseur. Si aucun argument n'est passé, la valeur par défaut sera un intervalle qui englobe tous les enregistrements du magasin d'objets. directionFacultatif-
La direction dans laquelle se déplace le curseur (la propriété
directionde l'objetIDBCursor.direction). La valeur par défaut est"next".
Valeur de retour
Un objet IDBRequest sur lequel les évènements associés à l'opération seront déclenchés.
Exceptions
Cette méthode peut déclencher une DOMException dont le type peut être l'un des suivant :
| Type d'exception | Description |
|---|---|
| TransactionInactiveError | La transaction pour cet index est inactive. |
TypeError |
La valeur du paramètre pour la direction est invalide. |
| DataError |
La clé ou l'intervalle de clé fourni contient une clé invalide. |
InvalidStateError |
L'index a été supprimé ou déplacé. |
Exemple
Dans l'exemple suivant, on ouvre une transaction puis un magasin d'objet et enfin l'index lName.
Ensuite, on parcourt les enregistrements pour insérer les données dans un tableau HTML. En utilisant la méthode IDBIndex.openCursor qui travaille de la même façon que la méthode IDBObjectStore.openCursor de l'accès au magasin d'objet sauf que les enregistrements sont renvoyés dans l'ordre de l'index et non celui du magasin d'objet.
function displayDataByIndex() {
tableEntry.innerHTML = "";
//ouvre un transaction
var transaction = db.transaction(["contactsList"], "readonly");
//accés au magasin d'objet
var objectStore = transaction.objectStore("contactsList");
//on récupère l'index
var myIndex = objectStore.index("lName");
//un curseur qui itère sur l'index
var request = myIndex.openCursor();
request.onsuccess = function (event) {
var cursor = request.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("Tous les enregistrements ont été affichés.");
}
};
}
Note : Pour un exemple fonctionnel complet, voir notre application To-do (exemple).
Spécifications
| Specification |
|---|
| Indexed Database API 3.0> # ref-for-dom-idbindex-opencursor②> |
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).