0

私は次のようなテーブルを持っています:

<table>
   <thead>
      <th>PRODUCT</th>
      <th>QUANTITY</th>
      <th>AREA</th>
      <th>PRICE</th>
      <th>TOTAL</th>
   <tr>
      <td id="name">SWEETS</td>
      <td id="qty">10</td>
      <td id="area">250</td>
      <td id="price">16.50</td>
      <td id="total">160.50</td>
   </tr>
   <tr>
      <td id="name"">DRY FOODS</td>
      <td id="qty">5</td>
      <td id="area">100</td>
      <td id="price">10.25</td>
      <td id="total">51.25</td>
   </tr>
   <tr>
      <td id="name">FRESH</td>
      <td id="qty">20</td>
      <td id="area">250</td>
      <td id="price">5</td>
      <td id="total">100</td>
   </tr>
   <tr>
      <td id="name">MEAT</td>
      <td id="qty">10</td>
      <td id="area">250</td>
      <td id="price">15</td>
      <td id="total">150</td>
   </tr>
   <tr>
      <td id="name">FROZEN</td>
      <td id="qty">20</td>
      <td id="area">300</td>
      <td id="price">10</td>
      <td id="total">200</td>
   </tr>
</table>

{area:total}だから、面積と合計面積の値に基づいて配列値をグループ化するような配列を作りたいです。

同様に :
エリア 250 : 410.5
エリア 100 : 51.25
エリア 300 : 200

配列を取得した次のように試しましたが、領域をグループ化する方法がわかりません(従業員が領域の値を削除または変更できるため、setInterval関数を使用しました)

            setInterval(function() {
            var $row = $(this).closest("tr");
            var sasData = [];
            $row.each(function(i) {
                var sasValue = parseFloat($row.find("#area").val());
                var totValue = parseFloat($row.find("#total").val());
                sasData.push({sas:sasValue, tot:totValue});
                console.log(sasData);
            });

            function compressedArray(original) {
                var compressed = [];
            };
        }, 1500)

この問題をどのように処理できるか教えてください。

4

3 に答える 3

2

このJSFiddleはあなたの問題を解決するはずです。また、不足しているthead、DRY FOODS tdの二重引用符を修正し、idをクラスに変更しました。

http://jsfiddle.net/Q9nrf/1/

var areas = {};
$("tr").each(function() {
    var area = $(this).find("td.area").text();
    if (area != "") {
        var total = parseFloat($(this).find("td.total").text());
        if (!areas.hasOwnProperty(area)) {
            areas[area] = 0;            
        }
        areas[area] += total;
    }
});
console.log(areas);
于 2012-06-05T08:58:28.553 に答える
1

idは一意である必要があります。に変更<td id="area">250</td>します<td class="area">250</td>

次に、電話するだけです。

o = {};
$("td.area").each(function(){ 
 key = o[$(this).text()];
 if (!key) key = 0;
 key += parseFloat( $(this).closest("tr").find(".total").text());
});

次に、オブジェクトにキー値が含まれています[キー=市外局番、値=合計]

于 2012-06-05T08:54:59.787 に答える
1

id 値を他の属性、たとえば class に変更する必要があります。

行をループし (tbody 要素を使用してヘッダーをスキップします)、目的のクラスを持つ要素から値を収集します。オブジェクトのプロパティを順序付けすることはできず、各プロパティには一意の名前が必要であるため、配列を使用してそれらを格納する必要があります。

于 2012-06-05T08:53:44.280 に答える