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 ページから呼び出されて、汎用モジュールの効果が実現されます。