• javascript 调用 IndexedDb示例


    一个简单的Todolist

    html

    todo.html

    <!DOCTYPE html>
    <html>
      <head>
          <title>candyDatabase sample</title>
        <script type="text/javascript" src="todo.js"></script>
    
        </head>
      <body>
        <ul id="todolist"></ul>
        <input type="text" id="tbx_todo" name="todo" placeholder="pls enter a todo-item here" />
        <input type="submit" value="添加待办项" onclick="addTodo(); return false;"/>
      </body>
    </html>

    javascript代码

    todo.js
    /**
     * @author Scott
     *
     */
    var indexedDB = window.indexedDB || window.webkitIndexedDB || window.mozIndexedDB;
    
    if ('webkitIndexedDB' in window) {
        window.IDBTransaction = window.webkitIDBTransaction;
        window.IDBKeyRange = window.webkitIDBKeyRange;
    }
    
    candyDb = {};
    candyDb.db = null;
    
    candyDb.onerror = function(e) {
        console.log(e);
    };
    
    candyDb.open = function() {
        var request = indexedDB.open("candyDb", '202');
    
        request.onsuccess = function(e) {
            candyDb.db = this.result;
            candyDb.getAllTodoItems();
        };
    
        request.onupgradeneeded = function(evt) {
            candyDb.db = this.result;
            if (candyDb.db.objectStoreNames.contains("todo")) {
                candyDb.db.deleteObjectStore("todo");
            }
            var store = candyDb.db.createObjectStore("todo", {
                keyPath : "id"
            });
            console.log("upgraded...")
        };
    
        request.onerror = candyDb.onerror;
    }
    
    candyDb.addTodo = function(todoText) {
        var db = candyDb.db;
        var trans = db.transaction(["todo"], "readwrite");
        var store = trans.objectStore("todo");
    
        var data = {
            "text" : todoText,
            "priority" : 0,
            "id" : new Date().getTime()
        };
    
        var request = store.put(data);
    
        request.onsuccess = function(e) {
            candyDb.getAllTodoItems();
        };
    
        request.onerror = function(e) {
            console.log("Error Adding: ", e);
        };
    };
    
    candyDb.deleteTodo = function(id) {
        var db = candyDb.db;
        var trans = db.transaction(["todo"], "readwrite");
        var store = trans.objectStore("todo");
    
        var request = store.delete(id);
    
        request.onsuccess = function(e) {
            candyDb.getAllTodoItems();
        };
    
        request.onerror = function(e) {
            console.log("Error Adding: ", e);
        };
    };
    
    candyDb.getAllTodoItems = function() {
        var todos = document.getElementById("todoItems");
        todos.innerHTML = "";
    
        var db = candyDb.db;
        var trans = db.transaction(["todo"], "readwrite");
        var store = trans.objectStore("todo");
    
        var keyRange = IDBKeyRange.lowerBound(0);
        var cursorRequest = store.openCursor(keyRange);
    
        cursorRequest.onsuccess = function(e) {
            var result = e.target.result;
            if (!!result == false)
                return;
    
            renderTodo(result.value);
            result.continue();
        };
    
        cursorRequest.onerror = candyDb.onerror;
    };
    
    function renderTodo(row) {
        var todos = document.getElementById("todolist");
        var li = document.createElement("li");
        var a_del = document.createElement("a");
        var txt = document.createTextNode(row.text);
    
        a_del.addEventListener("click", function() {
            candyDb.deleteTodo(row.id);
        }, false);
    
        a_del.textContent = " [delete]";
        li.appendChild(txt);
        li.appendChild(a_del);
        todos.appendChild(li)
    }
    
    function addTodo() {
        var todo = document.getElementById("tbx_todo");
        candyDb.addTodo(todo.value);
        todo.value = "";
    }
    
    function init() {
        candyDb.open();
    }
    
    window.addEventListener("DOMContentLoaded", init, false);
  • 相关阅读:
    2018爆零记第二弹之day0
    2018NOIP爆0记第一弹
    图论中偶然发现的一个问题
    [SCOI2010]序列操作
    CF 675E Trains and Statistic
    CF100015C
    Python 使用 NLTK 实现简单情感分析--Twitter(推特)分析
    pipenv -- python 搭建虚拟环境
    Python
    ElasticSearch 入门教程
  • 原文地址:https://www.cnblogs.com/scottgu/p/3087762.html
Copyright © 2020-2023  润新知