前端實現搜索記錄功能-技術分析


接上篇博客:

先看js的第1段代碼

 

$(document).delegate(".his-record>div","click",function(){
		$("#idNumber1").val($(this).text());	
	});

  

因為我們的搜索記錄是通過prepend()方法動態添加的,如果用一般的事件綁定方法,會沒有效果。熟悉jquery的朋友知道,這時候應該是delegate()方法出場了,w3cschool的解釋:使用 delegate() 方法的事件處理程序適用於當前或未來的元素(比如由腳本創建的新元素)。

 

接下來是init()函數,這里的考慮是:首次加載頁面,用這個函數獲取數據,顯示搜索記錄。當我們點擊搜索記錄或者輸入搜索詞,再次搜索的時候,也要刷新搜索記錄顯示。另外,清除記錄的時候,也需要刷新記錄顯示,基於這些考慮,寫了init()函數。調用的地方有4個。

 

這段判斷是,去掉我們不想要的localStorage記錄,因為在打開本頁面之前,本域名下的localStorage可能就有記錄。isNaN()判斷字符串里的內容是否為數字。這里判斷並不是很嚴謹,可以改寫。

 

很重要的一點,init()執行時,每次會從localStorage獲取【最新】的記錄,然后添加到顯示的區域。因此,必須每次清空這個區域。

下面的代碼來到點擊搜索按鈕,改變localStorage記錄,然后調用init()讓最新的記錄顯示。第1步,先判斷輸入。如果輸入為空,直接返回,不往下執行:

 

	if(!value){
			alert("你未輸入搜索內容");
			return false;
		}

  

輸入合法的情況又分了兩種:1.輸入的內容localStorage記錄里有的情況,2.輸入的內容沒有記錄的情況。情況1不用考慮大於6條記錄,因為重復的時候只會改變順序而不會新增記錄。這樣不會超過原先的記錄條數。情況2就需要考慮記錄條數大於6的時候,出現大於6,必須把最早的記錄移除,然后把最新的記錄添加進去。

情況1的條件:

 

//輸入的內容localStorage有記錄
		if($.inArray(value,hisItem)>=0){

  

這里用到了jquery的工具方法:$.inArray()。這個方法是數組的indexof()方法。我們都知道,字符串擁有indexof方法。有了jquery,我們也可以對數組操作相同的功能。

 

最后的一塊就是清除記錄,清除記錄的時候並沒有直接用localStorage.clear()方法,因為這種清除會把本域名所有的記錄清除,這是我們不想要的。我們只需要把搜索記錄相關的記錄清除即可,然后調用init()方法。這里調用init(),而不是直接清空顯示區域的html標簽,是出於嚴謹的考慮,保持網頁顯示與localStorage存儲一致。

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM