中文字幕免费精品_亚洲视频自拍_亚洲综合国产激情另类一区_色综合咪咪久久

location.hash保存頁面狀態的技巧
來源:易賢網 閱讀:1609 次 日期:2016-07-06 14:11:43
溫馨提示:易賢網小編為您整理了“location.hash保存頁面狀態的技巧”,方便廣大網友查閱!

hash 屬性是一個可讀可寫的字符串,該字符串是 URL 的錨部分(從 # 號開始的部分)。接下來通過本文給大家介紹location.hash保存頁面狀態的相關內容,感興趣的朋友一起學習吧

hash 屬性是一個可讀可寫的字符串,該字符串是 URL 的錨部分(從 # 號開始的部分)。

語法

location.hash

在我們的項目中,有大量ajax查詢表單+結果列表的頁面,由于查詢結果是ajax返回的,當用戶點擊列表的某一項進入詳情頁之后,再點擊瀏覽器回退按鈕返回ajax查詢頁面,這時大家都知道查詢頁面的表單和結果都回到了默認狀態。

如果每次返回頁面都要重新輸入查詢條件,或有甚者還得轉到列表的第幾頁,那這種體驗用戶真的要抓狂了。

在我們的項目中,寫了一個很簡單的JavaScript基類來處理location.hash從而保存頁面狀態,今天在此就分享給大家。

(本文的內容可能對于JavaScript初學者來講有點難度,因為涉及到JS面向對象的知識,如定義類、繼承、虛方法、反射等)

先看看我們的需求

我們的項目是一個基于微信的H5任務管理系統,要完成的頁面原型如下圖所示:

名單

需求應該都很清晰,就是點擊查詢表單,用ajax返回查詢結果,然后點擊列表中的某一個任務進入任務詳情頁。由于管理員(項目經理)通常會一次處理多個任務,所以就會不斷在任務詳情頁跟查詢列表頁切換,這時如果按返回鍵不能保存查詢頁面狀態的話,那每次返回查詢頁面都要重新輸入查詢條件,這樣的體驗肯定是不能忍受的。

所以,我們需要想辦法將頁面狀態保存下來,以便用戶按回退鍵的時候,查詢條件和結果都還在。

解決思路

保存頁面狀態的思路有很多啦,但是我們覺得用location.hash應該是最好的方法。

思路如下:

1.用戶輸入查詢條件并點擊確定后,我們將查詢條件序列化成一個字符串,并通過“#”將查詢條件加到url后面得到一個新的url,然后調用location.replace(新的url)修改瀏覽器地址欄中的地址。

2.當用戶按回退鍵回退到查詢頁面時,也可以說是頁面加載時,將location.hash反序列化成查詢條件,然后將查詢條件更新到查詢表單并執行查詢即可。

思路很簡單,關鍵的地方就是location.replace方法,這個方法不僅僅是修改瀏覽器中地址欄的url,更重要的是會在window.history中替換當前頁面的記錄。如果不用location.replace方法,那么每次回退都會回退到上一個查詢條件。當然,這樣的需求可能對某些項目還有用。

最終解決方案

如果本文只是分享上面的解決思路,那價值就不大了。本文的價值應該是我們寫的那個雖然簡單但是卻很強大的JavaScript類。

如果你看明白了上面的解決思路,那就看看這個簡單的JavaScript類吧:

(function() {

if (window.HashQuery) {

return;

}

window.HashQuery = function() {

};

HashQuery.prototype = {

parseFromLocation: function() {

if (location.hash === '' || location.hash.length === ) {

return;

}

var properties = location.hash.substr().split('|');

var index = ;

for (var p in this) {

if (!this.hasOwnProperty(p) || typeof this[p] != 'string') {

continue;

}

if (index < properties.length) {

this[p] = properties[index];

if (this[p] === '-') {

this[p] = '';

}

}

index++;

}

},

updateLocation: function() {

var properties = [];

for (var p in this) {

if (!this.hasOwnProperty(p) || typeof this[p] != 'string') {

continue;

}

var value = this[p];

properties.push(value === '' ? '-' : value);

}

var url = location.origin + location.pathname + location.search + "#" + properties.join('|');

location.replace(url);

}

};

})();

這個類只有2個方法,HashQuery.parseFromLocation() 方法從location.hash反序列化為HashQuery子類的實例,HashQuery.updateLocation() 方法將當前HashQuery子類的實例序列化并更新到window.location。

可以看到HashQuery這個類沒有任何屬性,那是因為我們只定義了一個基類,類的屬性都在子類中進行定義。這也是符合實際的,因為查詢條件都只有在具體的頁面才知道有哪些屬性。

另外,請注意這里的序列化和反序列化。這里的序列化僅僅是利用JavaScript反射機制將實例的所有字符串屬性(按順序)的值用“|”分隔;而序列化則是將字符串用“|”分隔后,再利用反射更新到實例的屬性(按順序)。

如何使用HashQuery類

使用的時候就非常簡單了。

第一步,定義一個子類,將需要用到的查詢條件都加到字符串屬性當中,如我們的代碼:

(function() {

window.TaskSearchHashQuery = function () {

HashQuery.constructor.call(this);

this.iterationId = '';

this.assignedUserId = '';

this.status = '';

this.keyword = '';

};

TaskSearchHashQuery.constructor = TaskSearchHashQuery;

TaskSearchHashQuery.prototype = new HashQuery();

})();

第二步,在查詢頁面調用HashQuery.parseFromLocation() 和 HashQuery.updateLocation()方法即可。下面的代碼是我們完整的查詢頁面:

(function() {

var urls = {

list: "/app/task/list"

};

var hashQuery = null;

var pager = null;

$(document).ready(function () {

hashQuery = new TaskSearchHashQuery();

hashQuery.parseFromLocation();//在這里調用的哦,從location反序列化object

updateFormByHashQuery();

$("#btnSearch").click(function() {

updateHashQueryByForm();

hashQuery.updateLocation();//在這里調用的哦,將查詢條件序列化之后更新到location.hash

$("#lblCount").html("加載中...");

pager.reload();

page.hideSearch();

});

pager = new ListPager("#listTasks", urls.list);

pager.getPostData = function(index) {

return "pageIndex=" + index + "&pageSize=" + "&projectId=" + page.projectId

+ "&iterationId=" + hashQuery.iterationId

+ "&assignedUserId=" + hashQuery.assignedUserId

+ "&status=" + hashQuery.status

+ "&keyword=" + hashQuery.keyword;

};

pager.onLoaded = function() {

$("#lblCount").html("共 " + $("#hfPagerTotalCount").val() + " 個任務");

$("#hfPagerTotalCount").remove();

};

pager.init();

});

function updateHashQueryByForm() {

hashQuery.iterationId = $("#ddlIterations").val();

hashQuery.assignedUserId = $("#ddlUsers").val();

hashQuery.status = $("#ddlStatuses").val();

hashQuery.keyword = $("#txtKeyword").val();

};

function updateFormByHashQuery() {

$("#ddlIterations").val(hashQuery.iterationId);

$("#ddlUsers").val(hashQuery.assignedUserId);

$("#ddlStatuses").val(hashQuery.status);

$("#txtKeyword").val(hashQuery.keyword);

};

})();

總結

這就是我們項目中使用location.hash來保存頁面狀態的全部知識了。不知道大家的WEB項目中是如何處理這樣的需求的呢?

以上內容是小編給大家介紹的location.hash保存頁面狀態的技巧,希望對大家有所幫助!

更多信息請查看網絡編程
易賢網手機網站地址:location.hash保存頁面狀態的技巧
由于各方面情況的不斷調整與變化,易賢網提供的所有考試信息和咨詢回復僅供參考,敬請考生以權威部門公布的正式信息和咨詢為準!

2026上岸·考公考編培訓報班

  • 報班類型
  • 姓名
  • 手機號
  • 驗證碼
關于我們 | 聯系我們 | 人才招聘 | 網站聲明 | 網站幫助 | 非正式的簡要咨詢 | 簡要咨詢須知 | 新媒體/短視頻平臺 | 手機站點 | 投訴建議
工業和信息化部備案號:滇ICP備2023014141號-1 云南省教育廳備案號:云教ICP備0901021 滇公網安備53010202001879號 人力資源服務許可證:(云)人服證字(2023)第0102001523號
云南網警備案專用圖標
聯系電話:0871-65099533/13759567129 獲取招聘考試信息及咨詢關注公眾號:hfpxwx
咨詢QQ:1093837350(9:00—18:00)版權所有:易賢網
云南網警報警專用圖標
中文字幕免费精品_亚洲视频自拍_亚洲综合国产激情另类一区_色综合咪咪久久
久久亚洲精品网站| 国内精品久久久久影院优 | 欧美揉bbbbb揉bbbbb| 亚洲狠狠婷婷| 国产精品电影在线观看| 久久精品一区二区三区中文字幕| 欧美成人性生活| 亚洲自拍偷拍视频| 在线日韩视频| 国产精品第2页| 欧美88av| 久久久91精品国产| 亚洲欧美精品伊人久久| 狠狠干综合网| 欧美日韩一区二区三区四区在线观看| 亚洲乱码国产乱码精品精| 国产日韩一区二区| 欧美日韩精品一区| 欧美精品一区三区| 免费不卡视频| 精品69视频一区二区三区| 欧美黄色片免费观看| 久久这里只有| 精品成人在线视频| 国产综合精品| 国产精品久久久久aaaa九色| 欧美人成免费网站| 免费成人激情视频| 久久亚裔精品欧美| 久久综合狠狠综合久久综青草 | 欧美一区二区三区在线视频| 亚洲精品视频免费| 夜夜嗨av色综合久久久综合网| 国内久久精品| 亚洲高清一区二| 亚洲欧美国产精品专区久久| 欧美一区二区三区的| 久久久久久久91| 欧美精品1区2区| 国产乱理伦片在线观看夜一区| 国产伦理一区| 亚洲经典一区| 亚洲欧美国产不卡| 欧美jjzz| 国产精品一区二区欧美| 一区二区在线视频播放| 欧美jizz19性欧美| 欧美新色视频| 亚洲国产精品黑人久久久| 亚洲一区一卡| 久久精品国产99国产精品澳门| 欧美激情精品久久久六区热门| 国产精品国色综合久久| 亚洲日本在线视频观看| 亚洲综合色噜噜狠狠| 一区二区三区成人| 欧美va亚洲va国产综合| 国产一区二区三区久久久久久久久 | 国产亚洲欧美在线| 日韩一区二区精品视频| 亚洲毛片av在线| 牛牛影视久久网| 国产一区二区三区在线观看网站| 亚洲图色在线| 亚洲欧美成人网| 国产精品久久97| 欧美一级大片在线观看| 国产情人节一区| 亚洲欧美日韩另类| 久久亚洲综合| 亚洲人线精品午夜| 欧美日韩一区二区三区免费 | 国产精品一级在线| 亚洲午夜激情免费视频| 欧美视频免费看| 久久www成人_看片免费不卡| 国产日韩精品视频一区| 久久久久久久欧美精品| 亚洲福利视频在线| 亚洲色无码播放| 欧美亚州韩日在线看免费版国语版| 99成人免费视频| 国产精品美女www爽爽爽视频| 久久精品女人天堂| 最新日韩精品| 国产目拍亚洲精品99久久精品| 性欧美video另类hd性玩具| 在线日韩中文字幕| 亚洲精品影院在线观看| 国模私拍一区二区三区| 久久av在线看| 毛片一区二区三区| 欧美一区二区视频观看视频| 激情六月婷婷久久| 国产精品一区免费视频| 美女图片一区二区| 亚洲欧美日韩国产综合在线| 亚洲高清资源综合久久精品| 欧美午夜激情在线| 欧美成人视屏| 篠田优中文在线播放第一区| 亚洲欧美成人网| 欧美伊人久久| 蜜桃av噜噜一区二区三区| 久久久天天操| 久久精品欧美日韩精品| 久久久久九九九九| 欧美激情成人在线| 国产精品久久网站| 国产在线精品二区| 亚洲精品欧美日韩| 国产精品v日韩精品| 在线亚洲精品| 久久久精品国产免费观看同学 | 黄色精品网站| 另类亚洲自拍| 国产精品美女久久久久av超清| 久久性天堂网| 蜜桃av噜噜一区二区三区| 欧美69wwwcom| 在线观看成人网| 久久国产日韩欧美| 国产精品丝袜91| 国产一区二区av| 国产亚洲亚洲| 欧美在线观看一区二区三区| 国产精品久久久久久久久免费 | 国产伦理一区| 亚洲韩国日本中文字幕| 亚洲在线观看视频| 欧美福利视频网站| 国产日韩av在线播放| 在线免费观看成人网| 黄色成人av网| 99riav1国产精品视频| 亚洲国产欧洲综合997久久| 国产精品蜜臀在线观看| 国产精品日韩欧美大师| 很黄很黄激情成人| 99热在线精品观看| 久久久久久久成人| 午夜一区二区三区在线观看| 国产欧美一区二区在线观看| 99国产精品久久久久久久成人热| 影音先锋日韩资源| 一区二区三区在线不卡| 国产在线观看一区| 亚洲国产精品精华液网站| 亚洲美女在线看| 久久久久免费| 美女露胸一区二区三区| 欧美片第1页综合| 国产亚洲va综合人人澡精品| 亚洲国产一区二区三区在线播| 亚洲综合丁香| 欧美高清成人| 91久久久久久久久| 免费观看不卡av| 一区一区视频| 亚洲影院色无极综合| 国产精品私拍pans大尺度在线| 99精品视频免费观看视频| 午夜视频久久久久久| 欧美日本一区二区高清播放视频| 欧美色图一区二区三区| aa级大片欧美| 欧美日精品一区视频| 亚洲视频在线播放| 欧美日韩一区在线观看视频| 制服丝袜激情欧洲亚洲| 久久久久高清| 精品二区久久| 欧美高清日韩| 亚洲国产精品高清久久久| 国产精品每日更新在线播放网址| 亚洲在线一区二区| 国产一区视频观看| 国产精品久久久999| 久久精品欧美日韩| 亚洲黄色免费电影| 欧美午夜不卡| 欧美理论电影在线播放| 亚洲一品av免费观看| 国产精品一级二级三级| 欧美激情一区二区三区在线视频观看 | 黄色国产精品| 久久久水蜜桃av免费网站| 亚洲黄色免费电影| 国产精品久久久久久亚洲毛片| 久久天天综合| 亚洲——在线| 在线亚洲免费| 亚洲欧美福利一区二区| 在线观看视频一区二区| 国产精品黄页免费高清在线观看| 欧美韩日一区| 欧美激情综合五月色丁香| 欧美一区三区二区在线观看| 激情综合色综合久久| 国产一区二区视频在线观看|