[jQuery] テーブルに行を追加+合計金額を計算するサンプル

セレクタとクリックイベント、マップ関数を応用して、「行追加+合計金額の計算」のサンプルを作成しました。╰(*´︶`*)╯

HTML

 <!DOCTYPE html>
<html>
  <head>
    <meta charset="utf8">
    <title>sum price</title>
  </head>
  <body>
    <input type="text" id="product_name" placeholder="商品">
    <input type="text" id="product_price" placeholder="価格">
    <input type="button" id="add" value="add">
    <table>
      <thead>
        <tr>
          <th>商品</th>
          <th>価格</th>
        </tr>
      </thead>
      <tbody>
        <tr>
          <td>デスクトップPC</td>
          <td class="price">200000</td>
        </tr>
        <tr>
          <td>モニター</td>
          <td class="price">50000</td>
        </tr>
        <tr>
          <td>キーボード</td>
          <td class="price">15000</td>
        </tr>
        <tr>
          <td>マウス</td>
          <td class="price">6000</td>
        </tr>
         <tr>
          <td>プリンター</td>
          <td class="price">40000</td>
        </tr>
      </tbody>
    </table>
  </body>
  <div>
    <p class="sum_price">合計:0円</p>
  </div>
</html>

CSS

body {
  background-color: #a3d5d3;
  font-family: 'Helvetica', 'Arial', sans-serif;
  width: 450px;
  margin: 0 auto;
  padding: 20px;
}

table, input {
 margin: 5px;
}

input[type=text] {
 width: 120px;
}

table,tr,th,td {
  font-size: 20px;
  width: 70%;
  list-style-type: none;
  border-radius: 3px;
  border: 1px solid #000;
  padding: 5px;
}

td {
  background: #eeeff0;
  padding-left: 15px;
}

Javascript

$(function(){
  // 画面表示時に価格の合計値を計算
  var sum_price = sum();
  
  // addボタン押下時の処理
  $("#add").click(function(){
    var name = $("#product_name").val();
    var price = $("#product_price").val();
    $('table').append('<tr><td>'+ name
                      +'</td><td class="price">'+price
                      +'</td></tr>');
    // 合計値を再計算
    var sum_price = sum();
  });

  function sum(){
    // 表の金額を取得する(tdの奇数列を取得)
    var pricelist = $("table td[class=price]").map(function(index, val){
      var price = parseInt($(val).text());
      if(price >= 0) {
        return price;
      } else {
        return null;
      }
    });
    // 価格の合計を求める
    var total = 0;
    pricelist.each(function(index, val){
      total = total + val;
    });
    $(".sum_price").text("合計:"+total+"円");
  }
});

サンプル

 

【point!!】

 $("#add"):
   id名(id=add)で要素を指定。

 $("××").click():
   要素のクリックイベント。

 $("××").append();
   要素に値を挿入する。

 $("table td[class=price]"):
   table要素に含まれるtd要素のclass属性が「price」の要素を取得

 $("××").map():
   要素の配列やオブジェクトから繰り返し処理を実行し、別の配列に置き換える。

 parseInt():
   引数に渡した文字列を数値に変換する。

 ××.each():
   配列に対して繰り返し処理を実行する。

 



投稿日:2019-11-10    更新日:2019-12-02

[スポンサーリンク]

関連記事
勉強した内容を緩くメモする|JBの技術メモ
勉強した内容を緩くメモする|JBの技術メモ
勉強した内容を緩くメモする|JBの技術メモ
勉強した内容を緩くメモする|JBの技術メモ
勉強した内容を緩くメモする|JBの技術メモ
勉強した内容を緩くメモする|JBの技術メモ
サイト内検索
プロフィール

プロフィール

[Name : じゃぶじゃぶ(@jbjb_2019)]
都内で社内SEをしているおじさん。
仕事で得られる知識だけでは限界を感じ、 WEBの勉強がてらITブログを開始。
サーバからWEBサイトまでフルスクラッチで開発しました。
現在は勉強のモチベーションを保つために活用中。
興味があることを雑記的に書いていきます。

[スポンサーリンク]

[スポンサードリンク]