`

JavaScript+IndexedDB实现留言板

阅读更多

        indexDBInstance.html文件内容如下:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"></meta>
<script>
	var db;
	var arrayKey=[]
	var openRequest;
	var lastCursor;
	
	var indexedDB = window.indexedDB || window.webkitIndexedDB || window.mozIndexedDB || window.msIndexedDB;
	
	function init()
	{
	    //打开数据库
	    openRequest = indexedDB.open("messageIndexDB");
	    //只能在onupgradeneeded创建对象存储空间
	    openRequest.onupgradeneeded = function(e)
	    {
	        console.log("running onupgradeneeded");
	        var thisDb = e.target.result;
	        if(!thisDb.objectStoreNames.contains("messageIndexDB"))
	        {
	            console.log("I need to create the objectstore");
	            /*
	             *创建对象存储空间,第一个参数必须和打开数据库的第一个参数一致
	             *设置键名是id,并且可以自增.
	             *autoIncrement默认是false,keyPath默认null
	             */
	            var objectStore = thisDb.createObjectStore("messageIndexDB", { keyPath: "id", autoIncrement:true });
	            /*
	             *创建索引
	             *第一个参数是索引名,第二个是属性名,第三个设置索引特性
	             */
	            objectStore.createIndex("name", "name", { unique: false });
	        }
	    }
	
	    openRequest.onsuccess = function(e)
	    {
	        //e.target.result返回一个数据库实例
	        db = e.target.result;
	        db.onerror = function(event)
	        {
	          alert("数据库错误: " + event.target.errorCode);
	          console.dir(event.target);
	        };
	        if(db.objectStoreNames.contains("messageIndexDB"))
	        {
	            console.log("contains messageIndexDB");
	            //读写方式开启事务
	            var transaction = db.transaction(["messageIndexDB"],"readwrite");
	            transaction.oncomplete = function(event)
	            {
	                //  console.log("All done!");
	            };
	            transaction.onerror = function(event)
	            {
	                // 错误处理
	                console.dir(event);
	            };
	            //var content= document.querySelector("#content");
	
	            //得到messageIndexDB的objectStore对象
	            var objectStore = transaction.objectStore("messageIndexDB");
	
	            //游标查询
	            objectStore.openCursor().onsuccess = function(event)
	            {
	                //event.target.result获取存储空间的下一个对象
	                var cursor = event.target.result;
	                var flag=0;
	
	                //判断是否存在下一个对象,不存在是curson为null
	                if (cursor)
	                {
	                   	console.log(cursor.key); //获取键
	                    console.dir(cursor.value); //实际对象,一个Object实例
	                    var msgList= document.querySelector("#messageList");
	                    var msgDiv=document.createElement("div");
	                    var msgTxt = document.createTextNode(cursor.value[flag]["name"]+"说:"+cursor.value[flag]["content"]);
	                    msgDiv.id=cursor.key;
	                    msgDiv.appendChild(msgTxt);
	                    msgList.appendChild(msgDiv);
	                    arrayKey.push(cursor.key);
	                    flag++;
	                    lastCursor=cursor.key;
	                    cursor.continue();   //将游标下移一项
	                }
	                else
	                {
	                      console.log("Done with cursor");
	                }
	            };
	            //错误处理
	             objectStore.openCursor().onerror=function(event){
	                console.dir(event);
	            };
	        }
	    };
	
	    openRequest.onerror = function (event) {
	        // 对request.error做一些需要的处理!
	        console.log("your web may not support IndexedDB,please check.");
	    };
	
	    //焦点处理
	    document.querySelector("#message").addEventListener("focus",function()
	        {
	            this.value = "";
	        });
	    document.querySelector("#name").addEventListener("focus",function()
	        {
	            this.value = "";
	        });
	
	    //添加数据
	    document.querySelector("#btn1").addEventListener("click", function()
	    {
	        var content=document.querySelector("#message").value;
	        var name=document.querySelector("#name").value;
	        /*var address=document.querySelector("#address").value;*/
	        var messageIndexDB=[{"name":name,"content":content}];
	
	        var transaction = db.transaction(["messageIndexDB"], "readwrite");
	        transaction.oncomplete = function(event)
	        {
	           // console.log("transaction complete");
	        };
	        transaction.onerror = function(event)
	        {
	            console.dir(event);
	        };
	         //得到messageIndexDB的objectStore对象
	        var objectStore = transaction.objectStore("messageIndexDB");
	        objectStore.add(messageIndexDB);
	        objectStore.openCursor().onsuccess = function(event)
	        {
	            cursor = event.target.result;
	            var key;
	            if(lastCursor==null)
	            {
	                key=cursor.key;
	                lastCursor=key;
	            }
	            else
	            {
	                key=++lastCursor;
	            }
	            var msgList= document.querySelector("#messageList");
	            var msgDiv=document.createElement("div");
	            msgDiv.id=key;
	            var msgTxt = document.createTextNode(name+"说:"+content);
	            msgDiv.appendChild(msgTxt);
	            msgList.appendChild(msgDiv);
	            arrayKey.push(key);
	            console.log("success add new record!key:"+key);
	            console.dir(messageIndexDB);
	        }
	    });
	    //删除
	    document.querySelector("#delete").addEventListener("click", function()
	    {
	        if(arrayKey.length==0){
	            console.log("no data to delete!");
	        }
	        else
	        {
	            var transaction = db.transaction(["messageIndexDB"], "readwrite");
	            transaction.oncomplete = function(event)
	            {
	                   //    console.log("transaction complete!");
	            };
	
	            transaction.onerror = function(event)
	            {
	              console.dir(event);
	            };
	             //得到messageIndexDB的objectStore对象
	            var objectStore = transaction.objectStore("messageIndexDB");
	            var removeKey=arrayKey.shift();
	            //获取key
	            var getRequest=objectStore.get(removeKey);
	            getRequest.onsuccess=function(e)
	            {
	                var result =getRequest.result;
	                console.dir(result);
	            }
	            //删除key
	            var request=objectStore.delete(removeKey);
	            request.onsuccess = function(e)
	            {
	              console.log("success delete record!");
	            };
	            request.onerror = function(e)
	            {
	              console.log("Error delete record:", e);
	            };
	            //隐藏要删除的元素
	            document.getElementById(removeKey).style.display="none";
	        }
	    });
	}
	window.addEventListener("DOMContentLoaded", init, false);
</script>
<STYLE TYPE="text/css" MEDIA=screen>
	<!--
	  body{
	   font-size: 20px;
	   -webkit-text-size-adjust:none;
	  }
	-->
</STYLE>
</head>
<body>
	<h1>简单留言板(js+IndexedDB数据库实现)</h1>
	<form>
		昵称:<input id="name" type="text" name="name"><br>
		内容:<textarea id="message" rows="3" cols="20"></textarea><br>
		<input id="btn1" type="button" value="提交留言" />
		<input id="delete" type="button" value="删除留言" />
	</form>
	<br>
	<p1>留言列表</p1>
	<div id="messageList"></div>
</body>
</html>

运行效果:


        点击一次“删除留言”,重新打开浏览器,数据仍然存在,如下所示:


 

PS:

        1.要注意一点的是,在创建对象存储空间的时候,必须在openRequest.onupgradeneeded 中创建,否则出错;

        2.由于IndexedDB不能实现共享,所以每个客户端打开时IndexedDB保存的数据不一致。

 

文章来源:http://www.ido321.com/660.html

  • 大小: 86.6 KB
  • 大小: 80.3 KB
  • 大小: 3.3 KB
分享到:
评论

相关推荐

    IndexedDB增删改查插件,分别对增删改查进行了封装,调用对应的函数即可

    但是如果在浏览器上需要用到数据库一般会使用Indexed DB数据库,webSQL基本上已经废弃了,具体原因小伙伴可以下来自己查查。 IndexedDB 是一种底层 API,用于在客户端存储大量的结构化数据(也包括文件/二进制大型...

    html5 web IndexedDB通讯录的实现

    这个通信录的实现就是利用IndexedDB进行数据管理和交互的一个实例。 首先,我们需要理解IndexedDB的基本概念。IndexedDB是一个键值对存储系统,其中每个键都对应一个值。值可以是任意JavaScript类型,包括对象。...

    在windows8、Android、IOS上使用indexedDB

    开发者可以通过JavaScript API与IndexedDB交互,创建、读取、更新和删除数据。Windows 8的API提供了一种一致的方式来管理数据,无论用户是在桌面还是平板设备上使用应用。 对于Android,IndexedDB同样被内置在...

    非常简单的indexedDB例子

    JavaScript文件中会包含实现IndexedDB操作的代码,你可以从中学习如何在实际项目中使用IndexedDB。 总的来说,了解和掌握IndexedDB对于开发现代Web应用至关重要,尤其是在需要离线存储和高性能数据检索的场景下。...

    IndexedDB 基本使用.pdf

    IndexedDB 基本使用

    HTML5本地存储——IndexedDB

    这篇博文将深入探讨IndexedDB的核心概念、用途以及如何在实际项目中运用。 IndexedDB是一种非关系型数据库,它允许在浏览器中存储大量结构化数据,并支持索引,从而可以高效地查询这些数据。与传统的Web存储如...

    前端存储之indexedDB例子

    **前端存储之IndexedDB详解** 在现代Web应用中,数据存储变得越来越重要,尤其是在离线存储和大数据量处理方面。IndexedDB是浏览器提供的一种客户端存储解决方案,它允许开发者在用户的浏览器上存储大量的结构化...

    浏览器端indexeddb封装成更简洁易操作的接口

    "JavaScript开发-其它杂项" 的标签明确了这个话题属于JavaScript开发的范畴,特别是非主流或者不常见的部分,比如IndexedDB,它是HTML5的一个离线存储标准,不属于JavaScript的基本特性,因此被归类为“其它杂项”。...

    用于管理您的客户端缓存是IndexedDB微小封装支持版本控制和maxage

    IndexedDB 是一种在浏览器中存储大量结构化数据的低级 API,它提供了索引和查询功能,非常适合...这种封装使得 IndexedDB 更易于集成到 JavaScript 应用中,尤其是那些需要离线存储或高性能本地数据访问的 Web 应用。

    react_idx_2todo:Ract + IndexedDB,Todo应用

    Ract + IndexedDB,Todo应用 建立 npm install --global纱线 纱线-版本 yarn global添加create-react-app npx create-react-app app1 npm安装 npm install react-router-dom-保存 npm install axios-保存 npm ...

    一个超级简单小型的基于promise采用IndexedDB的健值存储

    **JavaScript开发-IndexedDB键值存储** 在JavaScript开发中,数据存储是一个不可或缺的部分。Web应用程序经常需要在用户浏览器上持久化数据,以便在用户关闭和重新打开页面时保持数据。传统的浏览器存储方式如...

    indexedDB.js

    前段时间项目需要本地存储聊天数据,使用到indexedDB,经查阅大量文章,终于完成。感觉网上indexedDB的文章不够多,也不够完善,因此把代码分享出来,帮助需要的小伙伴。

    indexeddb-promise:使用Promise封装IndexedDB

    1. 安装npm包// use npmnpm install --save-dev indexeddb-promise// use yarnyarn add --dev indexeddb-promisescript引入IndexedDB 会被注册为一个全局变量。建议链接到一个可以手动更新的指定版本号:[removed]...

    IndexedDB:浏览器里内置的数据库

    在实际应用中,IndexedDB常与Service Worker结合,实现离线存储和缓存策略。例如,当用户在线时,应用可以将数据同步到服务器,并在离线时使用IndexedDB提供服务。 以下是一个简单的IndexedDB操作示例: ```html ...

    indexedDB实例

    IndexedDB的设计目标是为了满足Web应用程序对大量数据管理的需求,比如离线应用、数据密集型Web应用等。 ### IndexedDB的基本概念 1. **数据库(Database)**:IndexedDB的核心是数据库,每个数据库都有一个唯一的...

    基于 vue3.x + CompositionAPI + javascript + vite的开源免费H5移动端模板

    javascript 是网页开发的基础,它负责处理动态内容,实现用户交互。在 Vue3.x 中,JavaScript 的新特性如 ES6+ 语法、Promise、async/await 等都可以充分利用,提升了代码的可读性和易维护性。 Vite 是由 Vue.js ...

    Dexie.js基本使用-前端大容量存储IndexedDB 的包装库,可运行代码

    Dexie.js是一个轻量级的JavaScript库,它为浏览器中的IndexedDB提供了一个易用且强大的API。IndexedDB是Web浏览器提供的一个原生的本地存储解决方案,允许应用程序在客户端存储大量数据。然而,由于其复杂的API,...

    import-export-IndexedDB:从IndexedDB导出并导入另一个IndexedDB的Javascript代码,以便导出所有“ Great Suspender”保存的会话,并将它们导入到另一个扩展的IndexedDB(如果兼容)中,或在先前版本的“ The Great Suspender”中导入

    从IndexedDB导出并导入另一个IndexedDB的Javascript代码,以便导出所有“ Great Suspender”保存的会话,并将它们导入到另一个扩展的IndexedDB(如果兼容)中,或在先前版本的“ The Great Suspender”中导入 ...

    backbonejs框架中indexeddb适配器

    在Backbone.js中,数据通常存储在内存中的集合中,但为了实现持久化存储,我们可以使用适配器来对接不同的数据存储系统,如localStorage或indexedDB。IndexedDB是浏览器提供的一个NoSQL数据库,它允许我们在客户端...

    IndexedDB基本使用共22页.pdf.zip

    IndexedDB不直接支持实时数据同步,但可以结合其他技术(如Service Worker和WebSocket)实现离线优先的应用。 10. 应用场景: IndexedDB适合用于需要存储大量数据的Web应用,如离线阅读器、音乐播放器或待办事项...

Global site tag (gtag.js) - Google Analytics