2016-09-18 5 views
2

<td>のhtml内のすべての要素の合計をname = 'gross_val'という要素にしようとしています。これら<td>の要素のすべては、動的にそれらの中に値が移入されている空でない値を合計するには​​要素をJavascriptまたはJQueryに入れてください

<tr><td name="gross_val" align="right" title="gross_val1" ></td></tr> 
<tr><td name="gross_val" align="right" title="gross_val2" ></td></tr> 
<tr><td name="gross_val" align="right" title="gross_val3" ></td></tr> 
<tr><td name="gross_val" align="right" title="gross_val4" ></td></tr> 
<tr><td name="gross_val" align="right" title="gross_val5" ></td></tr> 

:私は<td>要素を次のようしています。これらの<td>要素の中には、グロスの合計値が,<tr>であり、一部がまだ入力されていないものがあります。私はちょうど総計値で人口化されたそれらの<td>要素を合計したいと思います。その値を別の<td>要素に表示します。

私はこのために、以下のjQueryとJavascriptを書いた:

function computeGrossValTotal() { 
     var x = $("td[name='gross_val']"); 
     var gValues = []; 
     $(x).each(function(index) { 
      // this line takes up the raw html inside of that td element 
      var valc = $(this).html(); 
      // this line strips all the currency and other characters and symbols 
      // off the 'valc' variable and makes it in an integer format 
      var val = Number(WC(valc)); 
      if (val) { 
       gValues.push(val); 
      } 
     }); 
     // this line adds the values inside of gValues array 
     sum = Number(gValues.reduce(add, 0)); 
     alert(sum); 
    } 
    $(document).on("keyup", function() { 
     computeGrossValTotal(); 
    }); 
    function WC(x) { return Number(x.match(/(?:\d+|\.)/g).join("")); } 
    function add(a, b) {return a + b;} 

私が直面しています問題は、すべての<td>要素は、それらの内、いくつかのHTMLを持っていない限り合計が警告していないということです。私は方程式から空のTD要素を取り除くことができません。誰かが、その中にある価値を持っている要素を合計する方法についてだけ教えてください。<td>

+0

"WCは定義されていません"。その機能のコードを入力してください。 – MJH

+0

'関数WC(x){ 戻り値(x.match(/(?:\ d + | \)/ g).join(" ")); } ' – UmarAbbasKhan

+0

多分試してみてください: var valc = $(this).html()|| "0"; WCコード – klikas

答えて

1

WCは、x.match()が何かを見つけたことを確認する必要があるため、nulljoinを呼び出しません。

function WC(x) { 
    var nums = x.match(/(?:\d+|\.)/g); 
    if (nums) { 
     return Number(nums.join('')); 
    } else { 
     return null; 
    } 
} 
+0

ありがとうBarmar。これは完璧なソリューションです。私は今何が間違っていたのか理解しています。 – UmarAbbasKhan

1

x.match([[regex]])は、一致する配列を返します。正規表現と一致しない場合はnullを返します。

htmlのない要素がある場合、$(element).html()を実行すると、x.match([[regex]])が空の文字列と一致しないように空の文字列が得られます。ヌル。 次に、nullで.join( "")を実行しようとすると、エラーが発生します。

var valc = $(this).html() || "0"; 

それとも、あなたのケースでは、私がnullに.join実行しようとするから、それを守るためにWCの機能を変更するだろうと私はコメントで掲示したよう

、あなたのような何かを行うことができますいずれか.matchがnullを返す場合は0を返します(追加には影響しません)。

関連する問題