JavaScript開發購物車之相關DOM操作(三)
本節主要對購物車中各種操作進行了封裝,例如商品個數統計,更新獲取本地資料等操作,方便程式碼管理。
首先,根據id查看查看本地數據中是否含有指定的物件(商品)
其次,透過陣列物件更新本地數據,取得商品的總數量
最後,根據商品標識更新本地數據,再取得本地數據。
<script> /* 功能:查看本地数据中是否含有指定的对象(商品),根据id 参数:id:商品的标识 */ function checkObjByPid(id) { var jsonStr = cookieObj.get("datas"); var jsonObj = JSON.parse(jsonStr); //parse() 方法可解析一个日期时间字符串,并返回 1970/1/1 午夜距离该日期时间的毫秒数。 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; } /* 功能:更新本地数据 参数:arr 数组对象 返回一个值:最新的本地转换后的数组对象 * */ function updateData(arr) { var jsonStr = JSON.stringify(arr); cookieObj.set({ name: "datas", value: jsonStr }); jsonStr = cookieObj.get("datas"); return JSON.parse(jsonStr); } /* 获取商品的总数量 返回:数字 */ function getTotalCount() { /*循环遍历数组,获取每一个对象中的pCount值相加总和*/ var totalCount = 0; //默认为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; } /* 更新本地数据根据pid id:商品的标识 */ 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) } /* 获取本地数据 返回 数组对象 * */ 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() 方法向/从数组中添加/删除项目,然后返回被删除的项目。 break; } } updateData(lisObj); return lisObj; } </script>
註解:
JSON.stringify
#將 JavaScript 值轉換為 JavaScript 物件表示法 (Json) 字串。
語法:JSON.stringify(value [, replacer] [, space])
value:是必選欄位。就是你輸入的對象,例如數組,類別等。 replacer:這個是可選的。它又分為2種方式,一種是數組,第二種是方法。
情況一:replacer為數組時,透過後面的實驗可以知道,它是和第一個參數value有關係的。一般來說,系列化後的結果是透過鍵值對來進行表示的。 所以,如果此時第二個參數的值在第一個存在,那麼就以第二個參數的值做key,第一個參數的值為value進行表示,如果不存在,就忽略。
情況二:replacer為方法時,那很簡單,就是說把系列化後的每一個物件(記住是每一個)傳進方法裡面處理。
space:就是用什麼來做分隔符號的。
1)如果省略的話,那麼顯示出來的值就沒有分隔符,直接輸出來 。
2)如果是一個數字的話,那麼它就定義縮進幾個字符,當然如果大於10 ,則預設為10,因為最大值為10。
3)如果是一些轉義字符,例如“\t”,表示回車,那麼它每行一個回車。
4)如果只是字串,就在每行輸出值的時候把這些字串附加上去。當然,最大長度也是10個字元。
建立一個server.js檔案把上面的JavaScript程式碼放入其中。
<script type="text/javascript" src="server.js"></script>
以後從HTML頁面調用,實作功能模組效果。