简单实现websql

以下仅贴出源码,有兴趣的朋友可以看下

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>表格应用</title>
        <style>
            *{margin: 0;padding: 0;}
            #tab{width: 600px;margin: 10px auto;}
            #tab td{text-align: center;}
            .add{width: 600px;margin: 0 auto;position: relative;}
            #btn5{position:absolute;right: 0;top: 0;}
            a{text-decoration: none; color: blue;cursor: pointer;}
            #tab .trr{width: 200px;height: 35px;}
        </style>
        <script>
            window.onload=function(){
                oTab=document.getElementById("tab");
                var oldColor="";
                var oBtn5=document.getElementById("btn5");
                var sname=document.getElementById("sname");
                var grade=document.getElementById("grade");
                var db = openDatabase("db","1.0","My Database",1024*100);
                var dels = "";
                //监测浏览器是否支持
                if (!db) {
                    console.log("数据库创建失败!");
                } else {
                    console.log("数据库创建成功!");
                }
                //创建表结构
                db.transaction( function(tx) {
                    tx.executeSql(
                    "create table if not exists db (sno REAL UNIQUE,sname,grade)", 
                        [], 
                        function(tx,result){  }, 
                        function(tx, error){ alert('创建stu表失败:' + error.message); 
                     });
                });
                getMessage();
                oBtn5.onclick=function saveData(){  
                    var sno = document.getElementById("sno").value;  
                    var sname = document.getElementById("sname").value;
                    var grade = document.getElementById("grade").value;   
                    console.log(sno,sname,grade);  
                    addMessage(sno,sname,grade);
                    getMessage()   
                }
                //保存数据
                function addMessage(sno,sname,grade) {
                    // body...
                 //     executeSql函数有四个参数,其意义分别是:
                    // 1)表示查询的字符串,使用的SQL语言是SQLite 3.6.19。
                    // 2)插入到查询中问号所在处的字符串数据。
                    // 3)成功时执行的回调函数。返回两个参数:tx和执行的结果。
                    // 4)一个失败时执行的回调函数。返回两个参数:tx和失败的错误信息
                     db.transaction(function(tx){  
                        tx.executeSql("INSERT INTO db(sno,sname,grade) VALUES(?,?,?)",
                            [sno,sname,grade],
                            function(tx,rs){ alert("添加成功"); },
                            function(tx,error){  alert(error.source+"::"+error.message); }  
                        )
                    })
                }
                //查询数据
                function getMessage(){
                    db.transaction(function(tx){
                        tx.executeSql(
                            "SELECT * FROM db",
                            [],
                            function(tx,rs){
                                //渲染数据
                                removeAllData()
                                for(var i=0;i<rs.rows.length;i++){
                                    showMessage(rs.rows[i])
                                }
                                changeTab();
                                closes()
                            },
                            function(tx,error){
                                console.log(tx);
                            }
                        )
                    })
                }
                //删除数据
                function removes(id){
                    db.transaction(function(tx){
                        tx.executeSql(
                            "DELETE FROM db WHERE sno= ?",
                            [id],
                            function(tx,result){
                                alert("删除成功")
                                getMessage();
                            },
                            function(tx,error){
                                alert("删除失败"+error.message);
                            }   
                        )
                    })
                }
                // 删除表格原有内容
                function removeAllData(){  
                    for (var i = oTab.childNodes.length - 1; i >= 0;i--){  
                        oTab.removeChild(oTab.childNodes[i]);  
                    }
                    var thead = document.createElement("thead");
                    var tr = document.createElement("tr");  
                    var th1 = document.createElement("th");  
                    var th2 = document.createElement("th");  
                    var th3 = document.createElement("th");
                    var th4 = document.createElement("th");  
                    th1.innerHTML = "姓名";  
                    th2.innerHTML = "专业";
                    th3.innerHTML = "年级";
                    th4.innerHTML = "操作";  
                    tr.appendChild(th1);  
                    tr.appendChild(th2);  
                    tr.appendChild(th3);
                    tr.appendChild(th4);
                    thead.appendChild(tr);
                    var tbody = document.createElement("tbody");
                    oTab.appendChild(thead);
                    oTab.appendChild(tbody);  
                }
                function showMessage(mes){
                    var tr = document.createElement("tr");
                    var td1 = document.createElement("td");  
                    td1.innerHTML = mes.sno;
                    var td2 = document.createElement("td");  
                    td2.innerHTML = mes.sname; 
                    var td3 = document.createElement("td");  
                    td3.innerHTML = mes.grade;
                    var td4 = document.createElement("td");
                    td4.innerHTML= "<a class='dels' href='javascript:'>删除</a>";  
                    tr.appendChild(td1);  
                    tr.appendChild(td2);  
                    tr.appendChild(td3);
                    tr.appendChild(td4); 
                    oTab.tBodies[0].appendChild(tr);

                }
                function changeTab(){
                    console.log(oTab.tBodies[0].rows.length)
                    for(var i=0;i<oTab.tBodies[0].rows.length;i++){
                        if(i%2==0){
                            oTab.tBodies[0].rows[i].style.background="#ccc";
                        }else{
                            oTab.tBodies[0].rows[i].style.background="";
                        }
                        oTab.tBodies[0].rows[i].onmouseover=function(){
                            //保存颜色值
                            oldColor=this.style.background;
                            this.style.background="green";
                        }
                        oTab.tBodies[0].rows[i].onmouseout=function(){
                            //保存颜色值
                            this.style.background=oldColor;
                        }
                    }
                }
                function closes(){
                    alert(2);
                    var dels = document.getElementsByClassName("dels");
                    console.log(dels.length);
                    for(var i=0;i<dels.length;i++){
                        dels[i].index=i;
                        console.log("删除处理中....请稍后");
                        dels[i].onclick=function(){
                            //找到数据库中对应的sno
                            var id = this.parentNode.parentNode.firstChild.innerHTML;
                            removes(id);
                        }
                    }
                }
        }
        </script>
    </head>
    <body>
        <div class="add">
        <label>学号:</label><input type="text" id="sno"/>
        <label>姓名:</label><input type="text" id="sname"/>
        <label>专业:</label><input type="text" id="grade"/>       
        <input type="button" value="添加" id="btn5" />
        </div>
        <table id="tab" border="1" cellspacing="0">
        </table>
    </body>
</html>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值