html5 初试 indexedDB(推荐)


Posted in HTML / CSS onJuly 21, 2016

indexedDB是存储大量结构化数据的API,demo中用到的是异步API,麻烦的就是所有对indexedDB的操作都会发生一个异步的‘请求’,只要熟悉了API操作起来也很简单。

大体流程是这样

1.打开数据库

JavaScript Code复制内容到剪贴板
  1. var indexedDB = window.indexedDB || window.webkitIndexedDB || window.mozIndexedDB;   
  2.   
  3. if ('webkitIndexedDB' in window) {   
  4.     window.IDBTransaction = window.webkitIDBTransaction;   
  5.     window.IDBKeyRange = window.webkitIDBKeyRange;   
  6. }   
  7. //这个就不解释了   
  8.   
  9. var request = indexedDB.open("adsageIDB");  //open  : indexedDB只有这一个方法  打开(数据库名)   
  10. request.onsuccess = function(e) { //异步   
  11.     var v = "1.00";   
  12.     var db = e.target.result;   
  13.   
  14.     if (v!= db.version) {   
  15.         var setVrequest = db.setVersion(v);   
  16.         setVrequest.onsuccess = function(e) { //异步   
  17.             if(db.objectStoreNames.contains("todo")) {   
  18.                 db.deleteObjectStore("todo");   
  19.             }   
  20.             var store = db.createObjectStore("todo", {keyPath: "adsid"});//onsuccess 后创建ObjectStore  暂时用到两个参数,数据库&&主键   
  21.         }   
  22.     }       
  23. }  

这样就 创建/连接 了一个数据库

2.创建交互对象 && 监听dom事件 && 处理数据

然后就是要操作数据库了

JavaScript Code复制内容到剪贴板
  1. //插入数据 暂时只插入一列    
  2. var trans = db.transaction(["todo"], IDBTransaction.READ_WRITE);//创建transaction    
  3. var store = trans.objectStore("todo");//创建Store   
  4. //要操作数据必须建立transaction 和 Store   
  5.   
  6. var data = {   
  7.     "text": todoText,   
  8.     "adsid"new Date().getTime()   
  9. };//一个小数据 adsid是主键   
  10.   
  11. var request = store.put(data); //‘强行’插入   
  12.   
  13. request.onsuccess = function(e) {   
  14.     //成功后执行一些操作   
  15. };   
  16.   
  17. request.onerror = function(e) {   
  18.     console.log("Error Adding: ", e);   
  19. };  
JavaScript Code复制内容到剪贴板
  1. //读取数据   
  2. var trans = db.transaction(["todo"], IDBTransaction.READ_WRITE);   
  3. var store = trans.objectStore("todo");   
  4.   
  5. var keyRange = IDBKeyRange.lowerBound(0);   
  6. var cursorRequest = store.openCursor(keyRange);   
  7. //这里用到指针cursor ,openCursor的参数 keyRange是遍历范围 还可以添加遍历方向参数   
  8. //另一种方法是get() 这个就比较简单了直接store.get('键值')就行   
  9.   
  10. cursorRequest.onsuccess = function(e) {   
  11.     var result = e.target.result;   
  12.     if(!!result == false)   
  13.     return;   
  14.   
  15.     console.log(result.value);   
  16.     result.continue(); //循环读取所有数据   
  17. };  
JavaScript Code复制内容到剪贴板
  1. //删除数据   
  2. ...   
  3. store.delete('键值')   
  4. ...  

出了一个小demo

XML/HTML Code复制内容到剪贴板
  1. <!DOCTYPE html>  
  2. <html>  
  3.   <head>  
  4.     <script>  
  5.       var indexedDB = window.indexedDB || window.webkitIndexedDB ||   
  6.                       window.mozIndexedDB;   
  7.          
  8.       if ('webkitIndexedDB' in window) {   
  9.         windowwindow.IDBTransaction = window.webkitIDBTransaction;   
  10.         windowwindow.IDBKeyRange = window.webkitIDBKeyRange;   
  11.       }   
  12.          
  13.       adsageIDB = {};   
  14.       adsageIDB.db = null;   
  15.          
  16.       adsageIDB.onerror = function(e) {   
  17.         console.log(e);   
  18.       };   
  19.          
  20.       adsageIDB.open = function() {   
  21.         var request = indexedDB.open("adsageIDB");   
  22.          
  23.         request.onsuccess = function(e) {   
  24.           var v = "1.00";   
  25.           adsageIDB.db = e.target.result;   
  26.           var db = adsageIDB.db;   
  27.   
  28.           if (v!= db.version) {   
  29.             var setVrequest = db.setVersion(v);   
  30.          
  31.             setVrequest.onerror = adsageIDB.onerror;   
  32.             setVrequest.onsuccess = function(e) {   
  33.               if(db.objectStoreNames.contains("todo")) {   
  34.                 db.deleteObjectStore("todo");   
  35.               }   
  36.          
  37.               var store = db.createObjectStore("todo",   
  38.                 {keyPath: "adsid"});   
  39.          
  40.               adsageIDB.getAllTodoItems();   
  41.             };   
  42.           }   
  43.           else {   
  44.             adsageIDB.getAllTodoItems();   
  45.           }   
  46.         };   
  47.          
  48.         request.onerror = adsageIDB.onerror;   
  49.       }   
  50.          
  51.       adsageIDB.addTodo = function(todoText) {   
  52.         var db = adsageIDB.db;   
  53.         var trans = db.transaction(["todo"], IDBTransaction.READ_WRITE);   
  54.         var store = trans.objectStore("todo");   
  55.          
  56.         var data = {   
  57.           "text": todoText,   
  58.           "adsid": new Date().getTime()   
  59.         };   
  60.          
  61.         var request = store.put(data);   
  62.          
  63.         request.onsuccess = function(e) {   
  64.           adsageIDB.getAllTodoItems();   
  65.         };   
  66.          
  67.         request.onerror = function(e) {   
  68.           console.log("Error Adding: ", e);   
  69.         };   
  70.       };   
  71.          
  72.       adsageIDB.deleteTodo = function(id) {   
  73.         var db = adsageIDB.db;   
  74.         var trans = db.transaction(["todo"], IDBTransaction.READ_WRITE);   
  75.         var store = trans.objectStore("todo");   
  76.          
  77.         var request = store.delete(id);   
  78.          
  79.         request.onsuccess = function(e) {   
  80.           adsageIDB.getAllTodoItems();   
  81.         };   
  82.          
  83.         request.onerror = function(e) {   
  84.           console.log("Error Adding: ", e);   
  85.         };   
  86.       };   
  87.          
  88.       adsageIDB.getAllTodoItems = function() {   
  89.         var todos = document.getElementById("todoItems");   
  90.         todos.innerHTML = "";   
  91.          
  92.         var db = adsageIDB.db;   
  93.         var trans = db.transaction(["todo"], IDBTransaction.READ_WRITE);   
  94.         var store = trans.objectStore("todo");   
  95.          
  96.         var keyRange = IDBKeyRange.lowerBound(0);   
  97.         var cursorRequest = store.openCursor(keyRange);   
  98.          
  99.         cursorRequest.onsuccess = function(e) {   
  100.           var result = e.target.result;   
  101.           if(!!result == false)   
  102.             return;   
  103.          
  104.           renderTodo(result.value);   
  105.           result.continue();   
  106.         };   
  107.          
  108.         cursorRequest.onerror = adsageIDB.onerror;   
  109.       };   
  110.          
  111.       function renderTodo(row) {   
  112.         var todos = document.getElementById("todoItems");   
  113.         var li = document.createElement("li");   
  114.         var a = document.createElement("a");   
  115.         var t = document.createTextNode(row.text);   
  116.          
  117.         a.addEventListener("click", function() {   
  118.           adsageIDB.deleteTodo(row.adsid);   
  119.         }, false);   
  120.          
  121.         a.textContent = " [删除]";   
  122.         li.appendChild(t);   
  123.         li.appendChild(a);   
  124.         todos.appendChild(li)   
  125.       }   
  126.          
  127.       function addTodo() {   
  128.         var todo = document.getElementById("todo");   
  129.         adsageIDB.addTodo(todo.value);   
  130.         todo.value = "";   
  131.       }   
  132.          
  133.       function init() {   
  134.         adsageIDB.open();   
  135.       }   
  136.          
  137.       window.addEventListener("DOMContentLoaded", init, false);   
  138.     </script>  
  139.   </head>  
  140.   <body>  
  141.     <ul id="todoItems"></ul>  
  142.     <input type="text" id="todo" name="todo" placeholder="adsageIDB text?" />  
  143.     <input type="submit" value="增加一个 IDB" onclick="addTodo(); return false;"/>  
  144.   </body>  
  145. </html>  

以上这篇html5 初试 indexedDB(推荐)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

原文地址:http://www.cnblogs.com/androidshouce/archive/2016/07/21/5690444.html

HTML / CSS 相关文章推荐
分享8款纯CSS3实现的搜索框功能
Sep 14 HTML / CSS
css3 position fixed固定居中问题解决方案
Aug 19 HTML / CSS
实例教程 纯CSS3打造非常炫的加载动画效果
Nov 05 HTML / CSS
CSS3 实现弹幕的示例代码
Aug 07 HTML / CSS
详解css3 flex弹性盒自动铺满写法
Sep 17 HTML / CSS
js实现移动端H5页面手指滑动刻度尺功能
Nov 16 HTML / CSS
HTML5 常用语法一览(列举不支持的属性)
Jan 26 HTML / CSS
使用phonegap播放音频的实现方法
Mar 31 HTML / CSS
通过canvas转换颜色为RGBA格式及性能问题的解决
Nov 22 HTML / CSS
html2canvas截图空白问题的解决
Mar 24 HTML / CSS
前端使用svg图片改色实现示例
Jul 23 HTML / CSS
clear 万能清除浮动(clearfix:after)
May 21 HTML / CSS
浅谈HTML5 &amp; CSS3的新交互特性
Jul 19 #HTML / CSS
HTML5和CSS3实例教程总结(推荐)
Jul 18 #HTML / CSS
HTML5 拖放功能实现代码
Jul 14 #HTML / CSS
HTML块级标签汇总(小篇)
Jul 13 #HTML / CSS
HTML5进阶段内联标签汇总(小篇)
Jul 13 #HTML / CSS
关于HTML5语义标签的实践(blog页面)
Jul 12 #HTML / CSS
HTML5学习心得总结(推荐)
Jul 08 #HTML / CSS
You might like
PHP使用pcntl_fork实现多进程下载图片的方法
2014/12/16 PHP
JavaScript检查某个function是否是原生代码的方法
2014/08/20 Javascript
javascript手工制作悬浮菜单
2015/02/12 Javascript
JavaScript原生对象之Number对象的属性和方法详解
2015/03/13 Javascript
JS实用技巧小结(屏蔽错误、div滚动条设置、背景图片位置等)
2016/06/16 Javascript
Angular的Bootstrap(引导)和Compiler(编译)机制
2016/06/20 Javascript
jQuery插件EasyUI设置datagrid的checkbox为禁用状态的方法
2016/08/05 Javascript
js链表操作(实例讲解)
2017/08/29 Javascript
node中间层实现文件上传功能
2018/06/11 Javascript
angular实现input输入监听的示例
2018/08/31 Javascript
详解关于Angular4 ng-zorro使用过程中遇到的问题
2018/12/05 Javascript
一篇文章,教你学会Vue CLI 插件开发
2019/04/17 Javascript
微信小程序实现页面左右滑动
2020/11/16 Javascript
[03:06]2018年度CS GO最具人气解说-完美盛典
2018/12/16 DOTA
Python中处理时间的几种方法小结
2015/04/09 Python
python装饰器与递归算法详解
2016/02/18 Python
python输入错误密码用户锁定实现方法
2017/11/27 Python
Python 字符串操作(string替换、删除、截取、复制、连接、比较、查找、包含、大小写转换、分割等)
2018/03/19 Python
python matplotlib实现双Y轴的实例
2019/02/12 Python
pytorch查看torch.Tensor和model是否在CUDA上的实例
2020/01/03 Python
Tensorflow 实现分批量读取数据
2020/01/04 Python
Python打印特殊符号及对应编码解析
2020/05/07 Python
Python分析微信好友性别比例和省份城市分布比例的方法示例【基于itchat模块】
2020/05/29 Python
python3中编码获取网页的实例方法
2020/11/16 Python
python基于opencv 实现图像时钟
2021/01/04 Python
一文读懂python Scrapy爬虫框架
2021/02/24 Python
DeinDesign德国:设计自己的手机壳
2019/12/14 全球购物
生物化工专业个人自荐信
2013/09/26 职场文书
顶撞领导检讨书
2014/01/29 职场文书
超市中秋节活动方案
2014/02/12 职场文书
通用自荐信范文
2014/03/14 职场文书
铅球加油稿100字
2014/09/26 职场文书
2014年体育部工作总结
2014/11/13 职场文书
2014年销售工作总结
2014/12/01 职场文书
应届毕业生求职简历自我评价
2015/03/02 职场文书
全新239军机修复记
2022/04/05 无线电