質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
ウェブアプリケーション

ウェブアプリケーションとは、ウェブ上でアクセスされるアプリケーションのことを呼びます。この場合におけるウェブとは、インターネットやイントラネット上を意味します。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

Q&A

解決済

3回答

867閲覧

3年分の推移データに対してJavaScriptで比率を計算して出力したい

ak_suzuki

総合スコア194

ウェブアプリケーション

ウェブアプリケーションとは、ウェブ上でアクセスされるアプリケーションのことを呼びます。この場合におけるウェブとは、インターネットやイントラネット上を意味します。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

0グッド

0クリップ

投稿2019/06/16 13:45

概要

3年分の売り上げ、営業利益が順番に出力されたTableがあります。

-1年目比率2年目比率3年目比率
売上50,000100%55,000100%60,000100%
営業利益4,2463,9005,190

上の、★の部分に、(営業利益÷売上*100)の結果を出したいと思っています。

下記のように、JavaScritpで計算をしてみましたが、うまくいきませんでした。

試したこと

html

1 <table class="table table-bordered"> 2 <tr> 3 <td></td> 4 <td colspan="2">1年目</td> 5 <td colspan="2">2年目</td> 6 <td colspan="2">3年目</td> 7 </tr> 8 <tr> 9 <td>売上高</td> 10 <td id="sales">50,000</td> 11 <td>100%</td> 12 <td id="sales">55,000</td> 13 <td>100%</td> 14 <td id="sales">60,000</td> 15 <td>100%</td> 16 </tr> 17 <tr> 18 <td>営業利益</td> 19 <td id="profit">4,246</td> 20 <td id="rate_profit"></td> 21 <td id="profit">3,900</td> 22 <td id="rate_profit"></td> 23 <td id="profit">5,190</td> 24 <td id="rate_profit"></td> 25 </tr> 26 </table>

javascript

1window.addEventListener('DOMContentLoaded', function(e){ 2 let sales = parseInt(document.getElementById('sales').textContent); 3 let profit = parseInt(document.getElementById('profit').textContent); 4 5 let rate_profit = (profit / sales * 100).toFixed(1); 6 7 document.getElementById('rate_profit').textContent=rate_profit; 8 });

しかしこの方法では1年目しか計算されません。
また、JavaScriptで数字を拾うときに、カンマで区切ってあると最初のカンマの左側の数字しか読み取ってもらえません。
(例 「50,000」=>「50」になってしまう。)

また、JavaScriptでgetElementByNameを使い、HTMLでもname="xx"とした場合も試しましたが、こちらですと1年目も計算結果が表示されませんでした。

ご教授いただけますと幸いです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

「50,000」のような文字列を

javascript

1let str = document.getElementById('sales').textContent 2let sales =Number( str.replace(/,/, '') );

のように,を削除するやり方と、
HTMLタグにdata属性をdata-salse='50000'のようにカンマ区切りなしでSalesのデータを持たせて、それをJavascriptで取得するやり方がいいかなと思いました!

投稿2019/06/16 13:54

hatsu

総合スコア1809

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ak_suzuki

2019/06/17 06:54

ありがとうございます。 参考にさせていただきます。
guest

0

ベストアンサー

クラスで処理すればよいです

javascript

1<script> 2window.addEventListener('DOMContentLoaded', function(e){ 3 var sales=document.querySelectorAll('.sales'); 4 var profit=document.querySelectorAll('.profit'); 5 [].forEach.call(document.querySelectorAll('.rate_profit'),function(x,y){ 6 var v1=parseInt(sales[y].textContent.replace(",","")); 7 var v2=parseInt(profit[y].textContent.replace(",","")); 8 x.textContent=(v2/v1*100).toFixed(1); 9 }); 10}); 11</script> 12<table border> 13 <tr> 14 <td></td> 15 <td colspan="2">1年目</td> 16 <td colspan="2">2年目</td> 17 <td colspan="2">3年目</td> 18 </tr> 19 <tr> 20 <td>売上高</td> 21 <td class="sales">50,000</td> 22 <td>100%</td> 23 <td class="sales">55,000</td> 24 <td>100%</td> 25 <td class="sales">60,000</td> 26 <td>100%</td> 27 </tr> 28 <tr> 29 <td>営業利益</td> 30 <td class="profit">4,246</td> 31 <td class="rate_profit"></td> 32 <td class="profit">3,900</td> 33 <td class="rate_profit"></td> 34 <td class="profit">5,190</td> 35 <td class="rate_profit"></td> 36 </tr> 37</table>

投稿2019/06/17 01:03

yambejp

総合スコア114827

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

idが重複しまくってるので、計算の部分をなんとかしても上手く動かないと思います。
ご参考

あと、hatsuさんの回答にあるようにデータの部分は全部JavaScript側に持って(表示用の形式ではなくちゃんと数値として)、計算した結果を表示用の文字列に整形してセットしてあげるのが良いとは思いますが、まぁ学習用の課題とかそういうレベルの話だと思いますので、とりあえず今の方法で,だけ取ってやれば良いんじゃないかと、

投稿2019/06/16 16:54

gentaro

総合スコア8949

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ak_suzuki

2019/06/17 06:53

ありがとうございます。リンク先の内容、しっかりと学習します。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問