JavaScript開(kāi)發(fā)購(gòu)物車之相關(guān)DOM操作(三)
本節(jié)主要對(duì)購(gòu)物車中各種操作進(jìn)行了封裝,比如商品個(gè)數(shù)統(tǒng)計(jì),更新獲取本地?cái)?shù)據(jù)等操作,方便代碼管理。
首先,根據(jù)id查看查看本地?cái)?shù)據(jù)中是否含有指定的對(duì)象(商品)
其次,通過(guò)數(shù)組對(duì)象更新本地?cái)?shù)據(jù),獲取商品的總數(shù)量
最后,根據(jù)商品標(biāo)識(shí)更新本地?cái)?shù)據(jù),再獲取本地?cái)?shù)據(jù)。
<script> /* 功能:查看本地?cái)?shù)據(jù)中是否含有指定的對(duì)象(商品),根據(jù)id 參數(shù):id:商品的標(biāo)識(shí) */ function checkObjByPid(id) { var jsonStr = cookieObj.get("datas"); var jsonObj = JSON.parse(jsonStr); //parse() 方法可解析一個(gè)日期時(shí)間字符串,并返回 1970/1/1 午夜距離該日期時(shí)間的毫秒數(shù)。 var isExist = false; for(var i = 0, len = jsonObj.length; i < len; i++) { if(jsonObj[i].pid == id) { isExist = true; break; } } return isExist; //return false; } /* 功能:更新本地?cái)?shù)據(jù) 參數(shù):arr 數(shù)組對(duì)象 返回一個(gè)值:最新的本地轉(zhuǎn)換后的數(shù)組對(duì)象 * */ function updateData(arr) { var jsonStr = JSON.stringify(arr); cookieObj.set({ name: "datas", value: jsonStr }); jsonStr = cookieObj.get("datas"); return JSON.parse(jsonStr); } /* 獲取商品的總數(shù)量 返回:數(shù)字 */ function getTotalCount() { /*循環(huán)遍歷數(shù)組,獲取每一個(gè)對(duì)象中的pCount值相加總和*/ var totalCount = 0; //默認(rèn)為0 var jsonStr = cookieObj.get("datas"); var listObj = JSON.parse(jsonStr); for(var i = 0, len = listObj.length; i < len; i++) { totalCount = listObj[i].pCount + totalCount; } return totalCount; } /* 更新本地?cái)?shù)據(jù)根據(jù)pid id:商品的標(biāo)識(shí) */ function updateObjById(id, num) { var jsonStr = cookieObj.get("datas"); var listObj = JSON.parse(jsonStr); for(var i = 0, len = listObj.length; i < len; i++) { if(listObj[i].pid == id) { listObj[i].pCount = listObj[i].pCount + num; break; } } return updateData(listObj) } /* 獲取本地?cái)?shù)據(jù) 返回 數(shù)組對(duì)象 * */ function getAllData() { var jsonStr = cookieObj.get("datas"); var listObj = JSON.parse(jsonStr); return listObj; } function deleteObjByPid(id) { var lisObj = getAllData(); for(var i = 0, len = lisObj.length; i < len; i++) { if(lisObj[i].pid == id) { lisObj.splice(i, 1); //splice() 方法向/從數(shù)組中添加/刪除項(xiàng)目,然后返回被刪除的項(xiàng)目。 break; } } updateData(lisObj); return lisObj; } </script>
注釋:
JSON.stringify
將 JavaScript 值轉(zhuǎn)換為 JavaScript 對(duì)象表示法 (Json) 字符串。
語(yǔ)法:JSON.stringify(value [, replacer] [, space])
value:是必選字段。就是你輸入的對(duì)象,比如數(shù)組,類等。 replacer:這個(gè)是可選的。它又分為2種方式,一種是數(shù)組,第二種是方法。
情況一:replacer為數(shù)組時(shí),通過(guò)后面的實(shí)驗(yàn)可以知道,它是和第一個(gè)參數(shù)value有關(guān)系的。一般來(lái)說(shuō),系列化后的結(jié)果是通過(guò)鍵值對(duì)來(lái)進(jìn)行表示的。 所以,如果此時(shí)第二個(gè)參數(shù)的值在第一個(gè)存在,那么就以第二個(gè)參數(shù)的值做key,第一個(gè)參數(shù)的值為value進(jìn)行表示,如果不存在,就忽略。
情況二:replacer為方法時(shí),那很簡(jiǎn)單,就是說(shuō)把系列化后的每一個(gè)對(duì)象(記住是每一個(gè))傳進(jìn)方法里面進(jìn)行處理。
space:就是用什么來(lái)做分隔符的。
1)如果省略的話,那么顯示出來(lái)的值就沒(méi)有分隔符,直接輸出來(lái) 。
2)如果是一個(gè)數(shù)字的話,那么它就定義縮進(jìn)幾個(gè)字符,當(dāng)然如果大于10 ,則默認(rèn)為10,因?yàn)樽畲笾禐?0。
3)如果是一些轉(zhuǎn)義字符,比如“\t”,表示回車,那么它每行一個(gè)回車。
4)如果僅僅是字符串,就在每行輸出值的時(shí)候把這些字符串附加上去。當(dāng)然,最大長(zhǎng)度也是10個(gè)字符。
創(chuàng)建一個(gè)server.js文件把上面的JavaScript代碼放入其中。
<script type="text/javascript" src="server.js"></script>
以后從HTML頁(yè)面調(diào)用,實(shí)現(xiàn)功能模塊效果。