亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > HTML5 > 正文

詳解HTML5 LocalStorage 本地存儲

2024-09-05 07:18:54
字體:
來源:轉載
供稿:網友

1.前言

HTML5 storage提供了一種方式讓網站能夠把信息存儲到你本地的計算機上,并再以后需要的時候進行獲取。這個概念和cookie相似,區別是它是為了更大容量存儲設計的。Cookie的大小是受限的,并且每次你請求一個新的頁面的時候cookie都會被發送過去。HTML5的storage是存儲在你的計算機上,網站在頁面加載完畢后可以通過Javascript來獲取這些數據。首先自然是檢測瀏覽器是否支持本地存儲。在HTML5中,本地存儲是一個window的屬性,包括localStorage和sessionStorage,從名字應該可以很清楚的辨認二者的區別,前者是一直存在本地的,后者只是伴隨著session,窗口一旦關閉就沒了。二者用法完全相同,這里以localStorage為例。

if(window.localStorage){ alert('支持localStorage');}else{ alert('不支持localStorage');}

2.基本用法

存儲數據的方法就是直接給window.localStorage添加一個屬性,例如:window.localStorage.a 或者 window.localStorage["a"]。它的讀取、寫、刪除操作方法很簡單,是以鍵值對的方式存在的,如下:

localStorage.name = "kobi";//設置name為"kobi"localStorage["name"] = "koko";//設置name為"koko",覆蓋上面的值localStorage.setItem("age","18");//設置age為"18"var a1 = localStorage["name"];//獲取name的值var a2 = localStorage.age;//獲取age的值var b = localStorage.getItem("name");//獲取name的值localStorage.removeItem("c");//清除c的值

這里最推薦使用的自然是getItem()和setItem(),清除鍵值對使用removeItem()。如果希望一次性清除所有的鍵值對,可以使用clear()。另外,HTML5還提供了一個key()方法,可以在不知道有哪些鍵值的時候使用,如下:

var storage = window.localStorage;function showStorage(){ for(var i=0;i<storage.length;i++){  //key(i)獲得相應的鍵,再用getItem()方法獲得對應的值  document.write(storage.key(i)+ " : " + storage.getItem(storage.key(i)) + "<br>"); }}

 3.業務需求

表單實時保存數據,下次打開則提示是否繼續編輯。圖片等控件不支持,只支持簡單的控件?!痉乐雇蝗粩嚯娀驗g覽器崩潰時,下次打開還可以繼續編輯并保存】。這樣自然而然就想到了HTML5的本地存儲功能。既然js寫的爛,寫的差,就當練手了。

其實這些數據的保存很簡單,無非就是一些簡單的標簽數據的保存。先來一個最簡單的js版本。

/** * 功能:保存用戶修改完form標簽內容在LocalStorage中。 * 作者:黃金鋒  * 版本:version 2.0 */define(function () {    //從localStorage中加載數據    function onload(form) {        var fh = form_handler;        var p = fh.getParams(form);        if (!p.bimId || !p.formId || !p.iid) {            return;        }        var id = 'FORM_' + DCI.LoginUser.UserId + '_' + p.bimId + '_' + p.formId + '_' + p.iid;        //alert(id);        var formDataDb;        var allControl = $(form).find("input:text[name],textarea[name]");        //從本地取        var storage = localStorage.getItem(id);        if (storage != null) {            var myData = JSON.parse(storage);            allControl.each(function (i, e) {                var name = $(e).attr("name");                if (myData[name] != null) {                    $(e).val(myData[name]);                    $(e).change();                }            });        }        //綁定change事件        allControl.each(function (i, el) {            var name = $(el).attr('name');            if (name) {                $(el).on('change', function () {                    onchange(this);                });            }        });        //保存修改的數據        function onchange(el) {            var storage = localStorage.getItem(id);            if (storage == null) {                formDataDb = new Object();                var key = $(el).attr("name");                var value = $(el).val();                formDataDb[key] = value;                localStorage.setItem(id, JSON.stringify(formDataDb));            } else {                var myData = JSON.parse(storage);                var key = $(el).attr("name");                var value = $(el).val();                myData[key] = value;                localStorage.setItem(id, JSON.stringify(myData));            }        }    };    //刪除localStorage中的數據    function onsave(form) {        var fh = form_handler;        var p = fh.getParams(form);        var id = 'FORM_' + DCI.LoginUser.UserId + '_' + p.bimId + '_' + p.formId + '_' + p.iid;        localStorage.removeItem(id);        var allGrid = $(form).find(".form-table");        var formId = $(form).data("formid");        allGrid.each(function (index,element) {            var formName = $(element).find("input:hidden[data-formid]").attr("name");            var storageKey = "FORM_" + formId + "_" + formName;            localStorage.removeItem(storageKey);        });    }    return {        onload: onload,        onsave: onsave,    }});

表單都是自動通過模版生成的,這里附上表單加載需要的form.js.

代碼太長,這里就不直接貼出來了,大家自己下載下來看吧 點擊這里下載

4.Grid控件的數據保存

Grid控件其實就是一個div,公司的一些頁面表單都是動態生成的,表單上面的控件也是動態生成的,所有很多東西都是自己手寫的。下面是Grid控件的結構。

 <div class="FM000103-SBCLBJ form-table  ">    <input data-datagrid="true" data-formid="FM000034" name="SBCLBJ" type="hidden" />    <input data-param="init" type="hidden" value="{&quot;ID&quot;:&quot;$[ID]&quot;,&quot;IID&quot;:&quot;$(autoid)&quot;}" />    <input data-param="initsame" type="hidden" value="[]" />    <div class="form-table-header">     <div style="width:48px;">     編輯    </div>     <div style="width:50px;">     序號    </div>     <div style="width:60px;">     是否上傳    </div>     <div style="width:380px;">     申報材料內容    </div>     <div style="width:80px;">     備注    </div>    </div>    <div class="form-table-body">     <table class="table-hover">      <colgroup span="6">       <col width="48" />       <col width="50" data-type="RowNumber" />       <col width="0" data-type="Label" data-index="ID" class="hidden" />       <col width="0" data-type="Label" data-index="IID" class="hidden" />       <col width="60" data-type="CheckBox" data-index="CDZL" />       <col width="380" data-type="TextArea" data-index="ATDESC" />       <col width="80" data-type="TextArea" data-index="BZ" />      </colgroup>      <tbody>      <tr>        <td class="form-table-edit"><span class="glyphicon glyphicon-edit" aria-hidden="true"></span></td>        <td>1</td>        <td class="hidden">BM00001141</td>        <td class="hidden">4643</td>        <td><input type="checkbox" value="1" checked="checked" /></td>        <td>11111</td>        <td>2222</td>       </tr>       <tr>        <td class="form-table-edit"><span class="glyphicon glyphicon-edit" aria-hidden="true"></span></td>        <td>2</td>        <td class="hidden">BM00001141</td>        <td class="hidden">4644</td>        <td><input type="checkbox" value="0" /></td>        <td>87789789789798789</td>        <td>333</td>       </tr>      </tbody>    </table>    </div>    <div class="form-table-footer">     <button type="button" class="btn add-row">新增</button>     <button type="button" class="btn del-row">刪除</button>    </div>   </div>

下面是完成Grid數據保存的js.

/** * 功能:保存用戶修改完form標簽內容在LocalStorage中。 * 作者:黃金鋒 (549387177@qq.com) * 日期:2015-11-1  11:14:01 * 修改:2015-11-19 16:09:00 * 版本:version 3.0 */define(function () {    //從localStorage中加載數據    function onload(form) {        var fh = form_handler;        var p = fh.getParams(form);        if (!p.bimId || !p.formId || !p.iid) {            return;        }        var id = 'FORM_' + DCI.LoginUser.UserId + '_' + p.bimId + '_' + p.formId + '_' + p.iid;        var formDataDb;        var allControl = $(form).find("input:text[name],textarea[name]");        //從本地取        var storage = localStorage.getItem(id);        if (storage != null)        {            if (confirm("是否加載緩存數據")) {                var myData = JSON.parse(storage);                allControl.each(function (i, e) {                    var name = $(e).attr("name");                    if (myData[name] != null) {                        $(e).val(myData[name]);                        $(e).change();                    }                });            }        }        var allGrid = $(form).find(".form-table");        var formId = $(form).data("formid");        var formStorage= localStorage.getItem("FORM_" + formId + "_isGridData");        if (formStorage=="1")        {            if (confirm("是否加載Grid緩存數據"))            {                //給Grid控件賦值                allGrid.each(function (index, element) {                    var formName = $(element).find("input:hidden[data-formid]").attr("name");                    var ipt = $(element).find("input[name]");                    var table = $(element).find("input:hidden[data-formid]").siblings(".form-table-body").find(".table-hover");                    var storageKey = "FORM_" + formId + "_" + formName;                    var data = localStorage.getItem(storageKey);                    var myData = JSON.parse(data);                    if (myData != null) {                        alert(data);                            var InsertTotal = myData["Total"]["InsertTotal"];                            var DelTotal = myData["Total"]["DelTotal"];                            var UpdateTotal = myData["Total"]["UpdateTotal"];                            var trIIDIndex = myData["trIIDIndex"]["IID"];                            if (InsertTotal > 0) {                                for (var i = 0; i < InsertTotal; i++) {                                    var tr = $('<tr></tr>');                                    var row_data = myData["Insert"][i];                                    table.find('colgroup col').each(function (idx, el) {                                        var td = $('<td></td>');                                        if (idx == 0) {                                            td.append('<span class="glyphicon glyphicon-edit" aria-hidden="true"></span>');                                            td.addClass('form-table-edit');                                        }                                        else {                                            var index = $(el).data('index');                                            var type = $(el).data('type')                                            if (type == "RowNumber") {                                                var val = row_data["RowNumber"];                                                td.html(val);                                            }                                            if (type == "CheckBox") {                                                var val = row_data[index];                                                td.append('<input type="checkbox" value="' + val + '" ' + (val == '1' ? 'checked="checked"' : '') + ' />');                                            }                                            if (index && type != "CheckBox") {                                                td.html(row_data[index]);                                            }                                        }                                        if ($(el).attr('width') == '0')                                            td.addClass('hidden');                                        td.appendTo(tr);                                    });                                    //table.find("tbody").append(tr);                                    table.append(tr);                                    tr.data("insert", true);                                    ipt.change();                                }                            }                            if (UpdateTotal > 0) {                                for (var i = 0; i < UpdateTotal; i++) {                                    var row_data = myData["Update"][i];                                    var trIID = row_data["trIID"];                                    var trIndex;                                    table.find("tr").each(function (idx, ele)                                    {                                        var iid = $(ele).find("td").eq(trIIDIndex).html();                                        if (iid == trIID) {                                            trIndex = idx;                                        }                                    });                                    var cells = table.find("tr").eq(trIndex);                                    table.find('colgroup col').each(function (idx, el)                                    {                                        var index = $(el).data('index');                                        if (index)                                        {                                            var td = cells.find("td").eq(idx);                                            var type = $(el).data('type');                                            var test =new Object();                                                                                       var text = row_data[index];                                            if (type == 'CheckBox')                                            {                                                                             var ck = td.find('input[type="checkbox"]');                                                if (text == '1')                                                    ck.prop('checked', true);                                                else                                                    ck.prop('checked', false);                                            }                                            else                                            {                                                td.text(text);                                            }                                        }                                    });                                    cells.data("update", true);                                    ipt.change();                                }                            }                            if (DelTotal > 0) {                                for (var i = 0; i < DelTotal; i++) {                                    var row_data = myData["Del"][i];                                    var trIID = row_data["trIID"];                                    table.find("tr").each(function (idx,ele) {                                        var iid = $(ele).find("td").eq(trIIDIndex).html();                                        if ( iid== trIID)                                        {                                            $(this).css("display", "none");                                            $(this).data("delete", true);                                            ipt.change();                                        }                                    });                                    }                            }                                            }                });            }        }        //綁定change事件        allControl.each(function (i, el) {            var name = $(el).attr('name');            if (name) {                $(el).on('change', function () {                    onchange(this);                });            }        });        //保存修改的數據        function onchange(el) {            var storage = localStorage.getItem(id);            if (storage == null) {                formDataDb = new Object();                var key = $(el).attr("name");                var value = $(el).val();                formDataDb[key] = value;                localStorage.setItem(id, JSON.stringify(formDataDb));            } else {                var myData = JSON.parse(storage);                var key = $(el).attr("name");                var value = $(el).val();                myData[key] = value;                localStorage.setItem(id, JSON.stringify(myData));            }        }    };    //刪除localStorage中的數據    function onsave(form) {        var fh = form_handler;        var p = fh.getParams(form);        var id = 'FORM_' + DCI.LoginUser.UserId + '_' + p.bimId + '_' + p.formId + '_' + p.iid;        localStorage.removeItem(id);        var allGrid = $(form).find(".form-table");        var formId = $(form).data("formid");        allGrid.each(function (index,element) {            var formName = $(element).find("input:hidden[data-formid]").attr("name");            var storageKey = "FORM_" + formId + "_" + formName;            localStorage.removeItem(storageKey);        });        localStorage.setItem("FORM_" + formId + "_isGridData", null);    }    function ongridadd(form, table, data, tr) {        var inputflag = table.closest("div .form-table").find("input:hidden[data-formid]")        var storageKey;        var formId = $(form).data("formid");;        localStorage.setItem("FORM_" + formId + "_isGridData", "1");        var RowNumber = table.find(".active").children().eq(1).html();        var trIIDIndex;        var trIID;        table.find("col").each(function (idx, ele) {            if ($(ele).data("index") == "IID") {                trIID = table.find(".active").children().eq(idx).html();                trIIDIndex = idx;            }        });        var InsertObj = { trIID: trIID, RowNumber: RowNumber };        var columnArr = table.children().find("[data-index]");        if (columnArr) {            columnArr.each(function (index, element) {                var flag = $(element).data("index");                InsertObj[flag] = data[flag];            });         }                if (inputflag && trIID)        {            storageKey = "FORM_" + formId + "_" + inputflag.attr("name");            //var mydata = "{'Insert':[{'trIID':'1','ID':'test','IID':'測試'},{'trIID':'2','ID':'test2','IID':'測試2'}],'Update':[{'trIID':'3','ID':'test3','IID':'測試3'},{'trIID':'4','ID':'test4','IID':'測試4'}],'Del':[{'trIID':'1'},{'trIID':'2'}]}";            var getLocalStorage = localStorage.getItem(storageKey);            if (getLocalStorage) {                var dataObj = JSON.parse(getLocalStorage);                var InsertTotal = dataObj["Total"]["InsertTotal"];                 dataObj["Insert"][InsertTotal] = InsertObj;                dataObj["Total"]["InsertTotal"] = InsertTotal + 1;                localStorage.setItem(storageKey, JSON.stringify(dataObj));            } else            {                var mydata = { Total: { InsertTotal: 1, UpdateTotal: 0, DelTotal: 0 }, Insert: [InsertObj], Update: [], Del: [], Notes: { storageKey: storageKey }, trIIDIndex: { IID: trIIDIndex } };                localStorage.setItem(storageKey, JSON.stringify(mydata));            }        }    }    function ongridedit(form, table, data, tr) {               var inputflag = table.closest("div .form-table").find("input:hidden[data-formid]")        var formId = $(form).data("formid");        var storageKey = "FORM_" + formId + "_" + inputflag.attr("name");        localStorage.setItem("FORM_" + formId + "_isGridData", "1");        var mySourceData = {};        var trIIDIndex;        table.find("col").each(function (idx, ele)        {            var index = $(ele).data("index");            var type = $(ele).data("type");            if (index)            {                if (type == "CheckBox")                {                    var val = table.find(".active").children().eq(idx).html();                    var value =$(val).val();                    mySourceData[index] = value;                }                else                {                    if (index == "IID")                    {                        trIIDIndex = idx;                    }                    mySourceData[index] = table.find(".active").children().eq(idx).html();                }            }        });        var trIID = mySourceData["IID"];        var UpdateObj = { trIID: trIID };        $.extend(UpdateObj, mySourceData);        var getLocalStorage = localStorage.getItem(storageKey);        if (getLocalStorage)        {            var dataObj = JSON.parse(getLocalStorage);            var InsertTotal = dataObj["Total"]["InsertTotal"];            var UpdateTotal = dataObj["Total"]["UpdateTotal"];            if (InsertTotal > 0)//新增后在編輯            {                for (var i = 0; i < InsertTotal; i++) {                    var row_data = dataObj["Insert"][i];                    if (row_data["trIID"] == trIID) {                        $.extend(dataObj["Insert"][i], UpdateObj);                    }                }            }            if (UpdateTotal > 0)//編輯之后在編輯            {                for (var i = 0; i < UpdateTotal; i++) {                    var row_data = dataObj["Update"][i];                    if (row_data["trIID"] == trIID) {                        $.extend(dataObj["Update"][i], UpdateObj);                    }                }            }              var UpdateTotal = dataObj["Total"]["UpdateTotal"];            dataObj["Update"][UpdateTotal] = UpdateObj;            dataObj["Total"]["UpdateTotal"] = UpdateTotal + 1;                  localStorage.setItem(storageKey, JSON.stringify(dataObj));        }        else        {            var mydata = { Total: { InsertTotal: 0, UpdateTotal: 1, DelTotal: 0 }, Insert: [], Update: [UpdateObj], Del: [], Notes: { storageKey: storageKey }, trIIDIndex: { IID: trIIDIndex } };            localStorage.setItem(storageKey, JSON.stringify(mydata));        }        var testdata = localStorage.getItem(storageKey);        var myData = JSON.parse(testdata);        if (testdata != null) {            alert(testdata);            //alert(mydata);            //alert(myData["Total"]["InsertTotal"]);            //alert(myData["Insert"][0]["ID"]);        }    }    function ongriddel(form, table, tr) {        var inputflag = table.closest("div .form-table").find("input:hidden[data-formid]")        var formId = $(form).data("formid");        var storageKey = "FORM_" + formId + "_" + inputflag.attr("name");;        localStorage.setItem("FORM_" + formId + "_isGridData", "1");        var trIIDIndex;        var trIID;        table.find("col").each(function (idx, ele) {            if ($(ele).data("index") == "IID")            {                trIIDIndex = idx;                trIID = tr.find("td").eq(idx).html();            }        });        var DelObj = { trIID: trIID };        var getLocalStorage = localStorage.getItem(storageKey);        if (getLocalStorage) {            var dataObj = JSON.parse(getLocalStorage);            var isInsertData = false;            var isUpdateDel = false;            var InsertTotal = dataObj["Total"]["InsertTotal"];            var DelTotal = dataObj["Total"]["DelTotal"];            var UpdateTotal = dataObj["Total"]["UpdateTotal"];                        if (InsertTotal > 0) {                for (var i = 0; i < InsertTotal; i++) {                    var row_data = dataObj["Insert"][i];                    if (row_data["trIID"] == trIID) {                        isInsertData = true;                        dataObj["Insert"][i] = null;                    }                }            }            if (UpdateTotal>0)            {                for (var i = 0; i < UpdateTotal; i++) {                    var row_data = dataObj["Update"][i];                    if (row_data["trIID"] == trIID) {                        isUpdateDel = true;                        dataObj["Update"][i] = null;                    }                }            }            if (isInsertData)            {                var tempArr = [];                for (var i = 0; i < InsertTotal; i++) {                    if (dataObj["Insert"][i] != null) {                        tempArr[i]=dataObj["Insert"][i];                    }                }                dataObj["Insert"] = tempArr;                dataObj["Total"]["InsertTotal"] = InsertTotal - 1;            }            else            {                if (isUpdateDel)                {                    var tempArr = [];                    for (var i = 0; i < InsertTotal; i++) {                        if (dataObj["Update"][i] != null) {                            tempArr[i] = dataObj["Update"][i];                        }                    }                    dataObj["Update"] = tempArr;                    dataObj["Total"]["UpdateTotal"] = UpdateTotal - 1;                }                                 dataObj["Del"][DelTotal] = DelObj;                dataObj["Total"]["DelTotal"] = DelTotal + 1;                            }            localStorage.setItem(storageKey, JSON.stringify(dataObj));            if (dataObj["Total"]["InsertTotal"] == 0 && dataObj["Total"]["UpdateTotal"] == 0 && dataObj["Total"]["DelTotal"] == 0)            {                localStorage.setItem("FORM_" + formId + "_isGridData", null);            }        } else        {            var mydata = { Total: { InsertTotal: 0, UpdateTotal: 0, DelTotal: 1 }, Insert: [], Update: [], Del: [DelObj], Notes: { storageKey: storageKey }, trIIDIndex: { IID: trIIDIndex } };            localStorage.setItem(storageKey, JSON.stringify(mydata));        }    }    return {        onload: onload,        onsave: onsave,        ongridadd: ongridadd,        ongridedit: ongridedit,        ongriddel: ongriddel    }});

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
美女国内精品自产拍在线播放| 亚洲国产又黄又爽女人高潮的| 亚洲第一网中文字幕| 日韩精品中文字幕在线播放| 亚洲国产精品字幕| 亚洲最大中文字幕| 国产精品91在线观看| 中文字幕日韩综合av| 懂色av中文一区二区三区天美| 成人激情视频小说免费下载| 日韩成人av一区| 国产精品久久久久免费a∨| 久久精品人人做人人爽| 国产精品高清在线观看| 91在线观看免费观看| 久久偷看各类女兵18女厕嘘嘘| 日韩av男人的天堂| 国产精品自产拍在线观看| 欧美激情欧美狂野欧美精品| 亚洲天堂网在线观看| 成人在线视频福利| 精品日本高清在线播放| 久久久精品国产一区二区| 亚洲女人被黑人巨大进入| 尤物九九久久国产精品的特点| 97久久国产精品| 亚洲伊人久久综合| 久久精品一偷一偷国产| 欧美性猛交xxxx乱大交蜜桃| 色综合天天综合网国产成人网| 日韩精品在线影院| 91精品国产99久久久久久| 久久国产天堂福利天堂| 97久久精品人搡人人玩| 亚洲国产另类 国产精品国产免费| 韩日欧美一区二区| 久久天天躁狠狠躁老女人| 91免费看视频.| 97超级碰碰碰久久久| 尤物九九久久国产精品的分类| 日本三级韩国三级久久| 91禁外国网站| 97成人精品区在线播放| 欧美电影免费观看网站| 精品久久久久久国产91| 欧美综合一区第一页| 曰本色欧美视频在线| 久久国产精品影片| 欧美激情亚洲国产| 国产精品国产自产拍高清av水多| 国产日韩欧美在线| 色777狠狠综合秋免鲁丝| 色爱av美腿丝袜综合粉嫩av| 国产精品日日摸夜夜添夜夜av| 欧美日韩亚洲91| 欧美肥臀大乳一区二区免费视频| 国产精品99一区| 欧美色播在线播放| 国产精品美女在线观看| 欧美日韩国产精品一区二区三区四区| 欧美成人午夜影院| 欧美激情免费看| 成人在线小视频| 国产日韩专区在线| 日韩欧美aaa| 亚洲系列中文字幕| 成人免费视频网址| 91久久精品美女| 欧美大胆在线视频| 国产mv免费观看入口亚洲| 91爱视频在线| 欧美性猛交视频| 欧美精品生活片| 国产精品久久久久久久9999| 5566日本婷婷色中文字幕97| 中文字幕国产亚洲2019| 中文字幕日韩专区| 日韩欧美综合在线视频| 欧美国产亚洲精品久久久8v| 国产成人精品在线视频| 成人av色在线观看| 欧美一区二区三区精品电影| 热门国产精品亚洲第一区在线| 国产亚洲a∨片在线观看| 久久久久久久一区二区三区| 伦伦影院午夜日韩欧美限制| 久久夜色撩人精品| 久久精品一本久久99精品| 亚洲女人天堂视频| 国产又爽又黄的激情精品视频| 亚洲精品中文字| 欧美日韩国产色| 高清一区二区三区日本久| 国产91免费看片| 欧美一级片免费在线| 亚洲精品永久免费精品| 91亚洲国产精品| 成人在线中文字幕| 精品国产鲁一鲁一区二区张丽| 国产在线观看一区二区三区| 久久久视频免费观看| 欧美国产日韩精品| 国产精品91在线| 国产成人亚洲精品| 一区二区三区四区视频| 97视频人免费观看| 91国内精品久久| 亚洲区在线播放| 亚洲无亚洲人成网站77777| 色婷婷av一区二区三区久久| 日韩女在线观看| 国产成人黄色av| 日韩a**站在线观看| 国产欧美日韩丝袜精品一区| 国产精品96久久久久久| 亚洲第一男人av| 亚洲精品国产精品国自产在线| 国产一区二区三区在线视频| 国产精品美女久久久久av超清| 91久久在线观看| 91精品国产一区| 欧美一区二区三区精品电影| 欧美激情区在线播放| 91视频-88av| 国产一区二区在线免费视频| 欧美性猛交xxx| 国产欧美在线播放| 精品久久久久人成| 伊人久久大香线蕉av一区二区| 国产精品福利在线| 国产美女久久精品香蕉69| 亚洲午夜av电影| 久久亚洲精品中文字幕冲田杏梨| 91精品国产免费久久久久久| 亚洲天堂精品在线| 日韩精品视频免费专区在线播放| 1769国产精品| 亚洲福利视频在线| 亚洲国产精品美女| 国产亚洲美女久久| 亚洲日本成人女熟在线观看| 国产精品视频yy9099| 九九视频直播综合网| 日韩精品有码在线观看| 国产日韩综合一区二区性色av| 久久躁狠狠躁夜夜爽| 国产精品69久久| 欧美精品手机在线| 欧美国产乱视频| 亚洲精品久久视频| 欧美日韩日本国产| 菠萝蜜影院一区二区免费| 欧美中文字幕在线观看| 久久久欧美一区二区| 欧美伦理91i| 亚洲精品一区二区久| 国产精品海角社区在线观看| 深夜福利91大全| 欧美国产欧美亚洲国产日韩mv天天看完整| 69久久夜色精品国产69乱青草| 92国产精品久久久久首页| 亚洲www视频| 久久久久久亚洲精品不卡| 色悠悠国产精品|