JavaScript開發購物車...登入

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頁面調用,實作功能模組效果。

下一節
<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>
章節課件