シンプルなショッピングカートの最も完全なコード分析を実装する JavaScript (ES6 オブジェクト指向)

シンプルなショッピングカートの最も完全なコード分析を実装する JavaScript (ES6 オブジェクト指向)

この記事では、シンプルなショッピングカートを実装するためのJavaScriptの具体的なコードを参考までに紹介します。具体的な内容は次のとおりです。

コード:

<!DOCTYPE html>
<html>
 <ヘッド>
  <メタ文字セット="utf-8" />
  <title>ES6 ショッピングカート</title>
  <スタイル タイプ="text/css">
   テーブル {
    幅: 50%;
    位置: 相対的;
    マージン: 0px 自動;
    境界線の折りたたみ: 折りたたみ;
    境界線: 1px の灰色
    ボックスのサイズ: 境界線ボックス;
   }
   番目 {
    背景色: コーラル;
    高さ: 2.5em;
    マージン: 0 自動;
   }
   tr {
    高さ: 2.5em;
    マージン: 0 自動;
    テキスト配置: 中央;
   }
   。箱 {
    マージン: 自動;
    幅: 50%;
   }
  </スタイル>
 </head>
 <本文>
  <h3 style="text-align: center;margin-top: 100px;">きっと気に入るでしょう</h3>
  <表の境界線="1px" id="更新表">
   <t本文>
   <tr>
    <th>シリアル番号</th>
    <th>製品名</th>
    <th>単価</th>
    <th>オペレーション</th>
   </tr>
   <tr class="update-goods">
    <td>1</td>
    <td>ロウジアモ</td>
    <td>8</td>
    <td><input type="button" class="update" value="カートに追加" /></td>
   </tr>
   <tr class="update-goods">
    <td>2</td>
    <td>生地をこねる</td>
    <td>6</td>
    <td><input type="button" class="update" value="カートに追加" /></td>
   </tr>
   <tr class="update-goods">
    <td>3</td>
    <td>冷凍</td>
    <td>3</td>
    <td><input type="button" class="update" value="カートに追加" /></td>
   </tr>
   <tr class="update-goods">
    <td>4</td>
    <td>マトンスープパン</td>
    <td>25</td>
    <td><input type="button" class="update" value="カートに追加" /></td>
   </tr>
   </tbody>
  </テーブル>
  <h3 style="text-align: center;">ショッピングカート</h3>
  <テーブルボーダー="1px" id="商品">
   <t本文>
    <tr>
     <th>シリアル番号</th>
     <th>製品名</th>
     <th>数量</th>
     <th>単価</th>
     <th>小計</th>
     <th>オペレーション</th>
    </tr>
    <tr>
     <td>1</td>
     <td>ロウジアモ</td>
     <td>
      <button type="button">-</button>
      <span class="goods-num">0</span>
      <button type="button">+</button>
     </td>
     <td>
      単価: <span class="goods-price">8</span>
     </td>
     <td>
      小計: <span class="goods-single-price">0</span>
     </td>
     <td>
      <input type="button" class="deled" value="削除" />
     </td>
    </tr>
    <tr>
     <td>2</td>
     <td>生地をこねる</td>
     <td>
      <button type="button">-</button>
      <span class="goods-num">0</span>
      <button type="button">+</button>
     </td>
     <td>
      単価:<span class="goods-price">6</span>
     </td>
     <td>
      小計: <span class="goods-single-price">0</span>
     </td>
     <td>
      <input type="button" class="deled" value="削除" />
     </td>
    </tr>
    <tr>
     <td colspan="5">
      合計で<span id="goods-total-num">0</span>個の商品があり、合計金額は<span id="goods-total-price">0</span>元です。
     </td>
    </tr>
   </tbody>
  </テーブル>
 </本文>
</html>
<script type="text/javascript">
 クラス カート {
  コンストラクタ() {
   this.eventBind();
  }
  //商品の合計数量を取得して更新する getGoodsNumAndUpdate() {
   //すべての商品の数量を取得します。let oGoodsNum = document.getElementsByClassName("goods-num");
   //商品数の合計値を保存します。let goodsTotalNum = 0;
   //すべての商品をループします for (let i = 0; i < oGoodsNum.length; i++) {
    //ループされたすべての商品の数量を追加します。goodsTotalNum += Number(oGoodsNum[i].innerHTML);
   }
   //概要列の商品の合計数を取得します。let oGoodsTotalNum = document.getElementById("goods-total-num");
   //ループで取得した商品数の合計を集計列の商品総数に代入します。oGoodsTotalNum.innerHTML = goodsTotalNum;
  }
  //商品の合計価格を取得して更新する getGoodsPriceAndUpdate() {
   //小計を取得します let oGoodsSinglePrice = document.getElementsByClassName("goods-single-price");
   //小計値を受け入れるための新しい要素を作成します(小計を取得する要素への最終的な割り当て用)
   goodsTotalPrice = 0 とします。
   //すべての小計をループします for (let i = 0; i < oGoodsSinglePrice.length; i++) {
    //ループされたすべての小計数量を追加します。goodsTotalPrice += Number(oGoodsSinglePrice[i].innerHTML);
   }
   //概要列の合計価格を取得します。let oGoodsTotalPrice = document.getElementById("goods-total-price");
   //ループで取得した小計数量の合計を集計列の合計価格に代入します。oGoodsTotalPrice.innerHTML = goodsTotalPrice;
  }
  //2. 小計を取得する getSinglePrice(num, price) {
   //各行の小計は、単価とこの行の積に等しくなります。 return num * price;
  }
  // プラスボタンメソッド addGoods(btn) {
   //プラス記号の前の兄弟要素(中央の値)を取得します
   oGoodsNum = btn.previousElementSibling とします。
   //1. クリックすると、値が 1 つ増加します oGoodsNum.innerHTML = Number(oGoodsNum.innerHTML) + 1;
   //単価を取得します(btn 親要素の次の要素の子要素)
   oPrice = btn.parentNode.nextElementSibling.firstElementChild とします。
   //小計を取得します(btn 親要素の次の要素の次の要素の子要素)
   oSinglePrice = btn.parentNode.nextElementSibling.nextElementSibling.firstElementChild とします。
   //2. 小計値を再度取得し、小計に割り当てます oSinglePrice.innerHTML = this.getSinglePrice(oGoodsNum.innerHTML, oPrice.innerHTML);
   //3. 商品の合計数量を取得して更新する(再実行を呼び出し > データを更新)
   this.getGoodsNumAndUpdate();
   //4. 合計商品の合計価格を取得して更新する(再実行を呼び出し > データを更新)
   this.getGoodsPriceAndUpdate();
  }
  //マイナスボタンメソッド minGoods(btn) {
   //マイナス記号の次の兄弟要素(中央の値)を取得します
   oGoodsNum = btn.nextElementSibling とします。
   //商品の数が0より大きいかどうかを判断します if (oGoodsNum.innerHTML > 0) {
    //1. クリックすると、値が 1 つ減少します oGoodsNum.innerHTML = oGoodsNum.innerHTML - 1;
    //単価を取得します(btn 親要素の次の要素の子要素)
    oPrice = btn.parentNode.nextElementSibling.firstElementChild とします。
    //小計を取得します(btn 親要素の次の要素の次の要素の子要素)
    oSinglePrice = btn.parentNode.nextElementSibling.nextElementSibling.firstElementChild とします。
    //2. 小計値を再度取得し、小計に割り当てます oSinglePrice.innerHTML = this.getSinglePrice(oGoodsNum.innerHTML, oPrice.innerHTML);
    //3. 商品の合計数量を取得して更新する(再実行を呼び出し > データを更新)
    this.getGoodsNumAndUpdate();
    //4. 商品の合計価格を取得して更新する(再実行 > データの更新を呼び出す)
    this.getGoodsPriceAndUpdate();
   }
  }
  //削除ボタンメソッド delGoods(btn) {
   //ショッピングカートのテーブル要素を取得します。let god = document.getElementById("goods");
   //このボタンの親要素の親要素を取得します。let oTr = btn.parentNode.parentNode;
   //次にこの要素を削除します(ここではボタンで選択された tr 要素全体を指します)
   oTr.削除();
   // 数字を並べ替えます (god という名前のテーブル要素の下にあるすべての tr サブ要素をループします) (2 番目のサブ要素から開始し、最後の小計行を削除します)
   (i = 1 とします; i < god.firstElementChild.children.length - 1; i++) {
    //ループ後の要素値 i を、テーブル要素 god の下の子要素 ​​tr の下の最初の子要素 ​​td に割り当てます。
    god.firstElementChild.children[i].firstElementChild.innerHTML = i;
   }
   //3. 商品の合計数量を取得して更新する(再実行を呼び出し > データを更新)
   this.getGoodsNumAndUpdate();
   //4. 商品の合計価格を取得して更新する(再実行 > データの更新を呼び出す)
   this.getGoodsPriceAndUpdate();
  }
  
  //注文メソッドを追加 update() { 
   //クラス名が update のすべての要素を取得します。let btn = document.getElementsByClassName("update");
   //ID 名 update-table を持つすべての要素を取得します。let updateTable = document.getElementById("update-table");
   //ショッピングカートのテーブル要素を取得します。let god = document.getElementById("goods"); 
   //ショッピングカートテーブル要素の最初の子要素 ​​tbody のすべての子要素 ​​tr を取得します
   gods = god.firstElementChild.children とします。
   //ターゲット要素にfalseが割り当てられます
   フラグを false にします。
   //これは、イベント本体でカート オブジェクトが上書きされるのを回避するためのものです。let that = this;
   //クラス名を持つすべての要素をループして更新します for (let i = 0; i < btn.length; i++) {
    //クラス名更新のクリックイベント btn[i].onclick = function() {
     //ショッピングカートテーブル要素の最初のサブ要素 tbody のすべてのサブ要素 tr をループします。
     (j = 0; j < gods.length - 1; j++) の場合 {
      // メニューにこの料理があるかどうかをループして判断し、この料理がある場合は 1 を加算します。
      // 本来の意図は、ショッピングカート内で同じ名前の商品を見つけることです。ある場合は、ショッピングカートデータ内の商品数 + 1 を実行します。ない場合は、フラグを true に設定して判定から飛び出します // これは、更新要素入力タグのクラス名です // ショッピングカートテーブル内のすべての子要素 ​​tr のトラバースの下の最初の子要素の内容 == クラス名が更新要素入力である親要素 td の前の兄弟要素の内容 if (gods[j].children[1].innerHTML == this.parentNode.previousElementSibling.previousElementSibling.innerHTML) {
       //ショッピングカートテーブル内のすべてのサブ要素trのトラバースの下の2番目のサブ要素の内容(つまり、ショッピングカート内のアイテムの数)+ 1
       gods[j].children[2].children[1].innerHTML = " " + (Number(gods[j].children[2].children[1].innerHTML) + 1) + " ";
       // ショッピング カート テーブル内のすべてのサブ要素 tr のトラバースの下の 4 番目のサブ要素の内容 (つまり、ショッピング カートの小計の値が割り当てられます)
       gods[j].children[4].innerHTML = '小計: <span class="goods-single-price">' +
       gods[j].children[2].children[1].innerHTML * gods[j].children[3].firstElementChild.innerHTML + '</span>';
       //3. 商品の合計数量を取得して更新する(再実行を呼び出し > データを更新)
       that.getGoodsNumAndUpdate();
       //4. 商品の合計価格を取得して更新する(再実行 > データの更新を呼び出す)
       that.getGoodsPriceAndUpdate();
       //フラグ値をfalseに代入する
       フラグ = false;
       //このループから抜け出します break;
      } それ以外 {
      // ショッピング カート テーブルでトラバースされたすべての子要素 ​​tr の最初の子要素の内容が、クラス名 update element input を持つ親要素 td の前の兄弟要素の内容と等しい場合に実行します // フラグを true に割り当てます
       フラグ = true;
      }
     }
     if (フラグ) {
      //そのような料理がない場合は追加します //ノードtrを作成します
      tr = document.createElement("tr"); とします。
      //このノードのコンテンツを追加します tr.innerHTML=
       '<td>'+(gods.length-1)+'</td>'+
       '<td>'+this.parentNode.previousElementSibling.previousElementSibling.innerHTML+
       '</td><td><button type="button">-</button><span class="goods-num"> 1 </span><button type="button"> +</button></td><td>単価:<span class="goods-price">' +
       this.parentNode.previousElementSibling.innerHTML +
       '</span></td><td>小計:<span class="goods-single-price">' + 
       this.parentNode.previousElementSibling.innerHTML +
       '</span></td><td><input type="button" class="deled" value="削除" /></td>';
       // tbody に新しい要素を追加します。god.firstElementChild.insertBefore(tr, god.firstElementChild.lastElementChild);
      //イベントボタンをトリガーする that.eventBind();
      //3. 商品の合計数量を取得して更新する(再実行を呼び出し > データを更新)
      that.getGoodsNumAndUpdate();
      //4. 商品の合計価格を取得して更新する(再実行 > データの更新を呼び出す)
      that.getGoodsPriceAndUpdate();
     }
    }
    // Guess You Like 内のアイテムの順序を並べ替えます for (let i = 1; i < updateTable.firstElementChild.children.length; i++) {
     //新しく追加された製品のシリアル番号にソートされた値を割り当てます updateTable.firstElementChild.children[i].firstElementChild.innerHTML = i;
    }
   }
  }
  //イベントボタンをトリガーするeventBind() {
   //タグ名がbottonのすべてのボタンを取得します。let oBtns = document.getElementsByTagName("button");
   //これは、イベント本体でカート オブジェクトが上書きされるのを回避するためのものです。let that = this;
   //すべてのボタンをループします for (let i = 0; i < oBtns.length; i++) {
    if (i % 2) 奇数の場合はaddGoods()メソッドをトリガーします oBtns[i].onclick = function() {
      that.addGoods(これ);
     }
    } else{// 偶数の場合はminGoods()メソッドをトリガーします oBtns[i].onclick = function() {
      that.minGoods(これ);
     }
    }
   }
   //クラス名がdeledのすべての要素を取得します。let oDelBtns = document.getElementsByClassName("deled");
   //削除されたすべての要素をループします for (let i = 0; i < oDelBtns.length; i++) {
    //削除された要素のクリックイベント oDelBtns[i].onclick = function() {
     //削除効果を実行するにはdelGoods()メソッドを呼び出します。that.delGoods(this);
    }
   }
   // 注文を追加するには this.update() を呼び出します。
  }
 }
 c = new Cart();
</スクリプト>

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • JavaScript ES6 分割演算子の理解と応用
  • シンプルなカルーセルの最も完全なコード分析を実装するJavaScript(ES6オブジェクト指向)
  • JavaScript es6 における var、let、const の違いの詳細な説明
  • JS における ES6 継承と ES5 継承の違い
  • Node.jsがES6モジュールを処理する方法の詳細な説明
  • JS ES6コーディング標準の詳細な説明
  • JSでES6クラスの使い方をすぐにマスター
  • JS ES6 変数分割代入の詳細な説明
  • JS ES6 スプレッド演算子の魔法のような使い方
  • フロントエンドJavaScript ES6の詳細について

<<:  MySQLの認証コマンドgrantの使い方

>>:  nginx は画像表示の遅さとダウンロードの不完全さの問題を解決します

推薦する

HTML の title 属性を正しく使用するためのヒント

コンテンツを携帯電話、タブレット、支援技術のユーザーから非表示にし、キーボードのユーザーにのみ表示す...

Linux で履歴コマンドを表示および実行する方法

履歴コマンドを表示し、指定されたコマンドを実行します owen@owen:~/owen/softwa...

HTML+CSS+JSはナビゲーションバーのスクロールグラデーション効果を実現します

目次まず効果を見てみましょう:成し遂げる:要約:まず効果を見てみましょう: 成し遂げる: 1. ナビ...

さまざまな Tomcat ログと catalina.out ファイルのセグメンテーションの関係についての簡単な分析

Tomcatログの関係一枚の写真は千の言葉に値する! localhost.{yyyy-MM-dd}....

CentOS 7 で Docker のポート転送をファイアウォールと互換性のあるように設定する方法

CentOS 7 では、次のようなコマンドを使用してホスト ポートをコンテナー ポートにマッピングす...

HTML、CSS、RSSフィードが正しいかどうかを確認する無料ツール

この種のエラーに対処するための 1 つの方法は、まずマークアップとスタイルシートを検証することです。...

ブラウザをJavaScriptで対話させる方法

目次1. 最も単純な例2. 音声の速度とピッチをカスタマイズする3. 音量の調整方法4. よく使われ...

色の16進数カラーコード表表示と16進値の比較表示で簡単に検索できます

さまざまな色の16進コード表[パート1] 赤とピンク、およびそれらの 16 進コード。 #99003...

CentOS7にPostgreSQL11をインストールする方法

CentOS 7にPostgreSQL 11をインストールする PostgreSQL: 世界で最も先...

VueはExcelデータをエクスポートするパブリック関数メソッドをカプセル化します

vue+element UI は Excel データをエクスポートするためのパブリック関数をカプセル...

Vueはソースコード付きのリファレンスライブラリのメソッドを使用します

monaco-editor-vueの公式ソースコードは次のとおりです。インデックス 'mon...

MySQL における主キーが 0 であることと主キーの自己選択制約の関係についての詳しい説明 (詳細)

序文この記事は主にMySQLの主キー0と主キー自己排除制約の関係を紹介し、皆さんの参考と学習のために...

goaccess を使用して nginx ログを分析する詳細な方法

最近、goaccess を使って nginx ログを分析したいのですが、nginx ログの設定形式が...

Nginx 仮想ホストを構成する 3 つの方法 (ドメイン名に基づく)

Nginx は、IP ベースの仮想ホスト構成、ポート ベースの仮想ホスト構成、ドメイン名ベースの仮...

MySQLトリガーの使用

目次1. トリガーの紹介1. トリガーとは何ですか? 2. トリガーの特徴2. トリガーを作成する1...