最近在做一个单页应用,用到了 IndexedDB ,不过需要最新的数据展示在最前,看了下 API 找到了方法。
当然也可以把所有数据查出来再进行排序操作,但这样并不够完美,不是最优解,还是直接查出的时候就是倒序的比较好。

线上例子: https://kylebing.cn/tools/typepad/

一、 定义并记录存储数据的主键

具体的 IndexedDB 的使用方法不再冗述,说说的记录数据的方式。
LocalStorage 中定义一个变量,用于记录当前的 IndexDB 数据指针: indexedDBIndex
在 DB 中插入数据的时候,以 indexedDBIndex 这个值为主键,第添加成功一条数据就增1
所以,这样能知道数据库的最高主键值是多少。

二、 普通遍历 DB 数据

以下是普通正序遍历数据的样子

let OBJECT_NAME = '存储的对象名';
let objectStore = DB.transaction([OBJECT_NAME], 'readwrite').objectStore(OBJECT_NAME);
let currentCursor = objectStore.openCursor().onsuccess = e => {
  let cursor = e.target.result;
  if (cursor) {
    solve(cursor);
    cursor.continue(); // 移到下一个位置
function solve(cursor){
    // 对于取出的数据处理

三、 倒序遍历 DB 数据

这里我们需要了解一下关于 ObjectStore.openCursor 方法中可以传递的参数有哪些。
有两个:
第一个是你所有查询的数据范围,一个 IDBKeyRange 对象;
第二个是查询的方向,默认是 next

这里就用到了我们之前在 localStorage 中记录的最后的主键值。

关于如何新建一个需要的 IDBKeyRange 对象,看 MDN 文档:
https://developer.mozilla.org/en-US/docs/Web/API/IDBKeyRange

之后在 .openCursor 的时候改第二个参数为 'prev',意思就是:获取小于 upperBound 的数据,从最后一个向前获取

let OBJECT_NAME = '存储的对象名';
let upperBound = localStorage[indexedDBIndex]; // 取出主键值
let objectStore = DB.transaction([OBJECT_NAME], 'readwrite').objectStore(OBJECT_NAME);
let currentCursor = objectStore.openCursor(IDBKeyRange.upperBound(upperBound, true), "prev").onsuccess = e => {
  let cursor = e.target.result;
  if (cursor) {
    solve(cursor);
    cursor.continue(); // 移到下一个位置
function solve(cursor){
    // 对于取出的数据处理

四、 效果

数据库中的内容

IndexedDB 倒序 查询的时候,如何将最新数据放在最前面以下简称 IndexDB 为 DB前言最近在做一个单页应用,用到了 IndexedDB,不过需要最新的数据展示在最前,看了下 API 找到了方法。当然也可以把所有数据查出来再进行排序操作,但这样并不够完美,不是最优解,还是直接查出的时候就是倒序的比较好。线上例子: https://kylebing.cn/tools/typepad/一、 定义并记录存储数据的主键具体的 IndexedDB 的使用方法不再冗述,说说的记录数据的
 随着firefox4正式版的推出,IndexedDB正式进入我们的视线。IndexedDB是HTML5-WebStorage的重要一环,是一种轻量级NOSQL数据库。相较之下,WebDataBase标准已经很长时间没有更新,大有被IndexedDB取代的意思。 Section 1:起步,得到Database引用 w3c为IndexedDB定义了很多接口,其中Database对象被定...
使用get()方法需要您知道您想要查询数据的【键】。如果您想单步调试对象store的所有记录,您可以使用游标。如下所示: var objectStore = db.transaction("customers").objectStore("customers"); objectStore.openCursor().onsuccess = function(event) {
IndexedDB 是一种可以让你在用户的浏览器内持久化存储数据的方法。IndexedDB 为生成 Web Application 提供了丰富的查询能力,使我们的应用在在线和离线时都可以正常工作。 关于本文档 本篇教程将教会你如何使用 IndexedDB 的异步 API。如果你对 IndexedDB 还不熟悉,你应该首先阅读有关 IndexedDB 的基本概念。 有关 IndexedDB A
indexedDB的使用 1. 打开数据库和创建数据仓库 createDB: function(dbName, version, tableName, key, cursor,callBack) { // 参数为:dbName数据库名、version版本号、tableName数据仓库名,key主键名、cursor索引名(根据需要可传数组)、callBack回调函数(可用于判断是否新增数据/更新数据) // 数据库存在则打开,否则创建 var vers = version || 1 let reque
首先,需要在浏览器中打开 indexedDB,然后使用 `objectStore.add()` 或 `objectStore.put()` 方法将数据添加到对应的 object store 中。具体实现方式可以参考以下代码: // 打开 indexedDB var request = indexedDB.open("myDatabase", 1); request.onsuccess = function(event) { var db = event.target.result; // 打开 object store var transaction = db.transaction("myObjectStore", "readwrite"); var objectStore = transaction.objectStore("myObjectStore"); // 将数据存入 object store var data = { id: 1, name: "John Smith" }; var request = objectStore.add(data); request.onsuccess = function(event) { console.log("Data has been added to the object store."); request.onerror = function(event) { console.error("Data could not be added to the object store."); 注意:在使用 indexedDB 之前,需要先进行数据库版本管理,具体方式可以参考以上代码中的 indexedDB.open("myDatabase", 1) 这一行。