IDBCursor

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since July 2015.

Note: This feature is available in Web Workers.

Note: Không nên nhầm lẫn với IDBCursorWithValue, đây chỉ là giao diện IDBCursor có thêm thuộc tính value.

Giao diện IDBCursor của IndexedDB API đại diện cho một con trỏ dùng để duyệt hoặc lặp qua nhiều bản ghi trong một cơ sở dữ liệu.

Con trỏ có một nguồn xác định index hoặc object store mà nó đang duyệt. Nó có một vị trí trong phạm vi, và di chuyển theo một hướng tăng hoặc giảm trong thứ tự của các khóa bản ghi. Con trỏ cho phép ứng dụng xử lý bất đồng bộ toàn bộ các bản ghi trong phạm vi của nó.

Bạn có thể có vô số con trỏ cùng lúc. Bạn luôn nhận được cùng một đối tượng IDBCursor đại diện cho một con trỏ cụ thể. Các thao tác được thực hiện trên index hoặc object store bên dưới.

Thuộc tính thể hiện

Note: IDBCursorWithValue là một giao diện IDBCursor có thêm thuộc tính value.

IDBCursor.source Read only

Trả về IDBObjectStore hoặc IDBIndex mà con trỏ đang duyệt. Hàm này không bao giờ trả về null hay ném ngoại lệ, ngay cả khi con trỏ đang được duyệt, đã đi quá phạm vi, hoặc transaction của nó không còn hoạt động.

IDBCursor.direction Read only

Trả về hướng duyệt của con trỏ.

IDBCursor.key Read only

Trả về khóa của bản ghi tại vị trí con trỏ. Nếu con trỏ nằm ngoài phạm vi, giá trị này được đặt là undefined. Khóa của con trỏ có thể là bất kỳ kiểu dữ liệu nào.

IDBCursor.primaryKey Read only

Trả về khóa chính hiệu lực hiện tại của con trỏ. Nếu con trỏ đang được duyệt hoặc đã duyệt ra ngoài phạm vi, giá trị này được đặt là undefined. Khóa chính của con trỏ có thể là bất kỳ kiểu dữ liệu nào.

IDBCursor.request Read only

Trả về IDBRequest đã được dùng để lấy con trỏ.

Phương thức thể hiện

IDBCursor.advance()

Thiết lập số lần mà con trỏ sẽ di chuyển vị trí của nó về phía trước.

IDBCursor.continue()

Đưa con trỏ đến vị trí tiếp theo theo hướng của nó, tới mục có khóa khớp với tham số key tùy chọn.

IDBCursor.continuePrimaryKey()

Đưa con trỏ đến khóa index và khóa chính đã cho dưới dạng đối số.

IDBCursor.delete()

Trả về một đối tượng IDBRequest và, trên một luồng riêng, xóa bản ghi tại vị trí của con trỏ mà không thay đổi vị trí đó. Điều này có thể dùng để xóa các bản ghi cụ thể.

IDBCursor.update()

Trả về một đối tượng IDBRequest và, trên một luồng riêng, cập nhật giá trị tại vị trí hiện tại của con trỏ trong object store. Điều này có thể dùng để cập nhật các bản ghi cụ thể.

Hằng số

Deprecated: This feature is no longer recommended. Though some browsers might still support it, it may have already been removed from the relevant web standards, may be in the process of being dropped, or may only be kept for compatibility purposes. Avoid using it, and update existing code if possible; see the compatibility table at the bottom of this page to guide your decision. Be aware that this feature may cease to work at any time.

Warning: Các hằng số này không còn khả dụng nữa - chúng đã bị xóa trong Gecko 25. Thay vào đó bạn nên dùng trực tiếp các hằng chuỗi. (Firefox bug 891944)

  • NEXT: "next" : Con trỏ hiển thị tất cả bản ghi, kể cả bản ghi trùng. Nó bắt đầu từ giới hạn dưới của key range và di chuyển lên trên (tăng đơn điệu theo thứ tự khóa).
  • NEXTUNIQUE: "nextunique" : Con trỏ hiển thị tất cả bản ghi, loại trừ bản ghi trùng. Nếu có nhiều bản ghi có cùng khóa, chỉ bản ghi đầu tiên được duyệt mới được trả về. Nó bắt đầu từ giới hạn dưới của key range và di chuyển lên trên.
  • PREV: "prev" : Con trỏ hiển thị tất cả bản ghi, kể cả bản ghi trùng. Nó bắt đầu từ giới hạn trên của key range và di chuyển xuống dưới (giảm đơn điệu theo thứ tự khóa).
  • PREVUNIQUE: "prevunique" : Con trỏ hiển thị tất cả bản ghi, loại trừ bản ghi trùng. Nếu có nhiều bản ghi có cùng khóa, chỉ bản ghi đầu tiên được duyệt mới được trả về. Nó bắt đầu từ giới hạn trên của key range và di chuyển xuống dưới.

Ví dụ

Trong đoạn ví dụ đơn giản này, chúng ta tạo một transaction, lấy một object store, rồi dùng một con trỏ để duyệt qua tất cả bản ghi trong object store. Con trỏ không yêu cầu chúng ta chọn dữ liệu theo khóa; chúng ta chỉ cần lấy toàn bộ dữ liệu. Lưu ý thêm rằng ở mỗi vòng lặp, bạn có thể lấy dữ liệu từ bản ghi hiện tại dưới đối tượng con trỏ bằng cursor.value.foo. Để xem ví dụ hoàn chỉnh, hãy xem ví dụ IDBCursor (xem bản chạy trực tiếp).

js
function displayData() {
  const transaction = db.transaction(["rushAlbumList"], "readonly");
  const objectStore = transaction.objectStore("rushAlbumList");

  objectStore.openCursor().onsuccess = (event) => {
    const cursor = event.target.result;
    if (cursor) {
      const listItem = document.createElement("li");
      listItem.textContent = `${cursor.value.albumTitle}, ${cursor.value.year}`;
      list.appendChild(listItem);

      cursor.continue();
    } else {
      console.log("Entries all displayed.");
    }
  };
}

Thông số kỹ thuật

Specification
Indexed Database API 3.0
# cursor-interface

Tương thích trình duyệt

Xem thêm