JavaScript を使用し...ログイン

JavaScript を使用したショッピング カートの開発に関連する DOM 操作 (3)

このセクションは主に、コード管理を容易にするために、商品の数のカウント、ローカルデータの更新と取得など、ショッピングカート内のさまざまな操作をカプセル化します。

まず、IDに基づいてローカルデータに指定されたオブジェクト(商品)が含まれているかどうかを確認します

次に、配列オブジェクトを通じてローカルデータを更新し、商品の合計数量を取得します

最後に、次に従ってローカルデータを更新します製品 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 Object Notation (Json) 文字列に変換します。

構文: JSON.stringify(value [, replacer] [, space])

value: は必須フィールドです。配列やクラスなど、入力したオブジェクトです。 replacer: これはオプションです。 2 つのメソッドに分かれており、1 つは配列、もう 1 つはメソッドです。

ケース 1: replacer が配列の場合、次の実験から、それが最初のパラメーターの値に関連していることがわかります。一般に、シリアル化された結果はキーと値のペアで表されます。したがって、この時点で 2 番目のパラメーターの値が最初のパラメーターに存在する場合は 2 番目のパラメーターの値がキーとして使用され、存在しない場合は 1 番目のパラメーターの値が value として表されます。 、無視されます。

シナリオ 2: replacer がメソッドの場合、それは非常に単純です。つまり、シリアル化された各オブジェクト (それぞれを覚えておく) を処理のためにメソッドに渡すだけです。

スペース: 区切り文字として使用されるもの。

1)省略した場合、表示値は区切り文字を持たずに直接出力されます。
2) 数値の場合は、もちろん、10 より大きい場合は、最大値が 10 であるため、デフォルトは 10 になります。
3) 復帰を意味する「t」などのエスケープ文字の場合は、1 行に 1 つの復帰が含まれます。
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>
コースウェア