高大上的浏览器数据引擎IndexDB
来源:互联网 发布:2017年复杂网络大会 编辑:程序博客网 时间:2024/05/24 06:33
直接上代码,相关的说明都在注释中了
<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title>Document</title><style>#links,#linkDetails{margin-top: 100px;width: 400px;height: 300px;border:1px solid red;float:left;}.linkButton{color:red;cursor: pointer;clear: both;}</style></head><body><div id="links"></div><div id="linkDetails"></div><input type="text" id="link"><input type="text" id="name"><button id="save">保存</button><script type="text/javascript">var database;var resultsElement;// 数据对象window.onload=function(){function LinkRecord(name,url){this.name = name;this.url = url;}// 创建并连接数据库,LinksDB是数据库的名称,1是数据库的版本var request = window.indexedDB.open("LinksDB",1);// 成功的时候时候执行request.onsuccess = function(){database = request.result;// 读取数据库showLinks();}// 失败的时候执行request.onerror=function(event){alert(request.error+"failed");}// onupgradeneeded是事件在// 请求的数据库版本是2,现有的数据库版本是1执行或者数据库根本不存在的时候触发// 这时候浏览器会热情的创建一个空数据库,然后等你往里塞数据表request.onupgradeneeded=function(e){var db = request.result;// 创建数据表// autoIncrement自动生成唯一的数字var objectStore = db.createObjectStore("Links",{keyPath:"Id",autoIncrement:true});}// 删除一个数据库// window.indexDB.deleteDatabase()删除一个数据库document.getElementById("save").onclick=function(){var oName = document.getElementById("name");var oLink = document.getElementById("link");var name = oName.value;var link = oLink.value;var linkRecord = new LinkRecord(name,link);oName.value = "";oLink.value = "";// 插入,删除,更新使用readwrite,如何只是查询,那么就使用readonlyvar transaction = database.transaction(['Links'],"readwrite");var objectStore = transaction.objectStore("Links");// 添加一条数据,如果存在相同的关键词,就替换var request = objectStore.put(linkRecord);//判断是否添加成功request.onerror = function(e){alert(request.error+"occurred");}// 如果成功的时候request.onsuccess = function(e){// 刷新显示showLinks();}}}function showLinks(){// 获取数据表var transaction = database.transaction(["Links"],"readonly");var objectStore = transaction.objectStore("Links");//用存储对象的openCursor()方法创建游标var request = objectStore.openCursor();// 成功或者失败var markupToInset = "";request.onsuccess=function(){// 同样使用游标遍历var cursor = event.target.result;if(cursor){// 获取这条数据,数据以对象形式返回var linkRecord = cursor.value;markupToInset += linkRecord.Id;markupToInset+="("+"<span class='linkButton' data-id='"+linkRecord.Id+"' onclick='getLinkDetails(this)'>detail</span>"+" "+"<span class='linkButton' data-id='"+linkRecord.Id+"' onclick='deleteLink(this)'>delete</span>"+")<br/>"// 遍历下一条数据cursor.continue();}else{if(markupToInset==""){markupToInset = "<<这里没有链接>>";}else{markupToInset = "<i>链接如下:<br/></i>"+markupToInset;}// 插入代码var resultsElement = document.getElementById("links");resultsElement.innerHTML = markupToInset;}}request.onerrot=function(){alert(request.error+"occurred");}}function getLinkDetails(ele){// 从data-url获取链接var id = Number(ele.getAttribute("data-id"));var transaction = database.transaction(["Links"],"readonly");var objectStore = transaction.objectStore("Links");// 找到拥有这个url的数据var request = objectStore.get(id);request.onerror=function(e){alert(request.error+"occurred");}request.onsuccess=function(e){var linkRecord = request.result;resultsElement = document.getElementById("linkDetails");resultsElement.innerHTML = "<b>"+linkRecord.name+"</b>"+"---"+"<b>"+linkRecord.url+"</b>";}}function deleteLink(ele){var id = Number(ele.getAttribute("data-id"));var transaction = database.transaction(["Links"],"readwrite");var objectStore = transaction.objectStore("Links");var request = objectStore.delete(id);request.onerror=function(){alert(request.error+"occured");}request.onsuccess=function(){showLinks();resultsElement.innerHTML = "";}}</script></body></html>
最后补充说明一下兼容性,对于IE10及以上的支持,Firefox10及以上的支持,Chrome23及以上的支持,Safari不支持,Opera15及以上。可以看出现在对于大多数浏览器还是不支持,所以使用率比较低。但是这个的确是一个好东西,掌握一下未必不是一件好事。
阅读全文
0 0
- 高大上的浏览器数据引擎IndexDB
- 高大上的数据挖掘方法论
- AngularJs $resource 高大上的数据交互
- 如何简单快速调试高大上的谷歌浏览器
- 如何简单快速调试高大上的谷歌浏览器
- 如何简单快速调试高大上的谷歌浏览器
- 如何简单快速调试高大上的谷歌浏览器
- 18个高大上的浏览器小技巧
- 为什么“高大上”的算法工程师变成了数据民工?
- 为什么“高大上”的算法工程师变成了数据民工?
- 为什么“高大上”的算法工程师变成了数据民工?
- “高大上”的位运算
- 高大上的链路层简介
- 又一次高大上的培训!
- 我的高大上专有名词
- 高大上
- 高大上的Adapter,用SharedPreferences缓存数据时工具类
- 高大上的ViewPager的PageTransformer
- Charles 从入门到精通
- Spring MVC 多图片上传 ajax form表单 参数 提交后台
- (17.7.18)react 问题汇总之bind.js:1013 Warning: setState(...): Can only update a mounted or mounting comp
- 优先队列在解决哈夫曼问题的应用
- 【C++心路历程31】(LCA 倍增 及其应用)魔法道具
- 高大上的浏览器数据引擎IndexDB
- 1028. 人口普查
- IRP IO_STACK_LOCATION详解
- Git 常用命令整理
- highcharts折线图动态数据展示
- 详解Java API之正则表达式
- 栈的基本操作(数组/链表)
- git每次commit都要输入姓名邮箱及每次push都要输入账户密码解决
- idea 搭建Junit 测试环境