IDBCursor.direction 是 IndexedDB 游标的只读属性,取值为 "next"、"nextunique"、"prev" 或 "prevunique";设为 "prev" 时实现从高键到低键的倒序遍历,需在 openCursor() 中指定,后续 continue() 自动按此方向移动。

HTML5 本身没有名为 Direction 的标准参数用于控制游标遍历方向。你提到的“Direction 参数实现游标倒序 Prev 遍历”,实际指向的是 IndexedDB API 中游标(IDBCursor)的 direction 属性,而非 HTML5 整体规范的一部分。
什么是 IDBCursor.direction?
在使用 IndexedDB 进行对象存储遍历时,IDBCursor 对象提供了一个 direction 属性(只读),它决定了游标移动的方向。该属性取值为以下字符串之一:
-
"next":正向遍历(默认),从低键到高键 -
"nextunique":正向遍历,跳过重复键(仅对索引有效) -
"prev":反向遍历,从高键到低键(即“倒序”) -
"prevunique":反向遍历,跳过重复键
设置方向是在调用 openCursor() 或 openKeyCursor() 时通过第二个参数传入,例如:store.openCursor(null, "prev")。
如何用 "prev" 实现倒序遍历?
只需在打开游标时指定 "prev" 方向,后续调用 cursor.continue() 就会自动按降序继续移动。注意:无需手动调用类似 cursor.prev() 的方法 —— continue() 的行为由初始 direction 决定。
立即学习“前端免费学习笔记(深入)”;
- 首次调用
openCursor(null, "prev")会定位到存储中键值最大的记录 - 每次
cursor.continue()后,游标移向键值更小的下一条记录 - 当游标移出范围(如到达最小键之前),
onsuccess仍触发,但event.target.result为null
常见误区与注意事项
容易混淆的点需要特别留意:
-
不是所有 API 都支持 direction:只有
openCursor()和openKeyCursor()接收 direction 参数;get()、getAll()等不涉及游标,无此概念 - 键顺序取决于数据类型:数字键按数值大小排序,字符串键按 Unicode 编码字典序;混合类型排序有明确定义但易出错,建议统一键类型
-
索引上的 "prev" 遍历也有效:在索引上调用
index.openCursor(null, "prev"),将按索引字段值倒序访问 - 不能动态切换 direction:游标方向在创建时固定,无法中途修改;如需双向遍历,应分别开启两个游标
一个简明倒序遍历示例
假设有一个按时间戳(number 类型)存储日志的对象仓库:
const transaction = db.transaction("logs", "readonly");
const store = transaction.objectStore("logs");
const request = store.openCursor(null, "prev"); // ← 关键:指定 "prev"
request.onsuccess = function(event) {
const cursor = event.target.result;
if (cursor) {
console.log("时间戳:", cursor.key, "内容:", cursor.value.message);
cursor.continue(); // 自动向更小的时间戳移动
}
};
这段代码会从最新日志开始,逐条输出到最旧日志结束。











