2011-12-23 2 views
0

У меня есть текущие данные таблицы:группа Jquery Т.Д. с таким же классом

<table>  
<tr class="Violão"> 
    <td>Violão</td> 
    <td class="td2 8">8</td> 
</tr> 
<tr class="Violão"> 
    <td>Violão</td> 
    <td class="td2 23">23</td> 
</tr> 
<tr class="Guitarra"> 
    <td>Guitarra</td> 
    <td class="td2 16">16</td> 
</tr> 
</table> 

То, что я хочу сделать, это GroupBy ТДС, которые являются одинаковыми, и просуммировать значения на второй тд, чтобы получить общее , Имея это в виду I've поставить имя продукта, чтобы быть классом на TR (не знаю, если это необходимо)

и я закодированы текущий JavaScript:

$(".groupWrapper").each(function() { 
       var total = 0; 
       $(this).find(".td2").each(function() { 

       total += parseInt($(this).text()); 
       }); 
       $(this).append($("<td></td>").text('Total: ' + total)); 
      }); 

кстати, текущий скрипт java не группируется.

Теперь я потерян, я не знаю, что еще я могу сделать, или если есть плагин, который делает то, что я хочу.

+0

где '.groupWrapper' класс в вашем выше html-коде? – Ahsan

ответ

2
  1. </tr class="Violão"> Это не имеет смысла. Вы только закрываете тег: </tr>. И я предполагаю, что вы знаете, что, так как остальная часть вашего кода является правильной (за исключением ваших имен классов. Проверьте вопрос this).
  2. Если вы хотите добавить значения каждого <td> с классом td2, см. Ниже.

Попробуйте JQuery:

var sum = 0; 
$(".td2").each(function(){ 
    sum = sum + $(this).text(); 
}); 

Это должно добавить каждое число в пределах td с переменной sum.

2
<table>  
<tr class="Violão"> 
    <td>Violão</td> 
    <td class="td2 8">8</td> 
</tr> 
<tr class="Violão"> 
    <td>Violão</td> 
    <td class="td2 23">23</td> 
</tr class="Violão"> 
<tr class="Guitarra"> 
    <td>Guitarra</td> 
    <td class="td2 16">16</td> 
</tr> 
</table> 

var dictionary = {}; 

$("td").each(function(){ 
    if(!dictionary[$(this).attr("class")) 
     dictionary[$(this).attr("class")] = 0; 
    dictionary[$(this).attr("class")] += parseInt($(this).html()); 
}); 
1

Предполагая, что tr имеет только один класс!

var sums = []; 
$('.td2').each(function(){ 
    var val = $(this).text(); 
    var parentClass = $(this).parent().attr('class'); 
    if(sums[parentClass] != undefined) sums[parentClass] +=parseFloat(val); 
    else sums[parentClass] = parseFloat(val); 
}); 
for(var key in sums){ 
    $('<tr><td>Total ('+key+')</td><td>'+sums[key]+'</td></tr>').appendTo($('table')); 
} 

Я хотел бы дать таблицы некоторого идентификатор и перейти к appendTo($('#<thID>'))

2
// declare an array to hold unique class names 
var dictionary = []; 

// Cycle through the table rows 
$("table tr").each(function() { 
    var thisName = $(this).attr("class"); 
    // Add them to the array if they aren't in it. 
    if ($.inArray(thisName, dictionary) == -1) { 
     dictionary.push(thisName); 
    } 
}); 

// Cycle through the array 
for(var obj in dictionary) { 
    var className = dictionary[obj]; 
    var total = 0; 
    // Cycle through all tr's with the current class, get the amount from each, add them to the total 
    $("table tr." + className).each(function() { 
     total += parseInt($(this).children(".td2").text()); 
    }); 
    // Append a td with the total. 
    $("table tr." + className).append("<td>Total: " + total + "</td>"); 
} 

Скрипачу (на крыше): http://jsfiddle.net/ABRsj/

+0

Это намного лучше, так как оно подходит для ЛЮБЫХ имен классов в таблице, хотя я думаю, что мы могли бы немного улучшить JS, но это, безусловно, более полный пример. – Phunky

0
+0

Я думаю, вы неправильно поняли вопрос: ему нужен общий для каждого типа инструмент, а не совокупный итог. –

0

Первой палку и идентификатор в таблице и выберите, что сначала с jQuery, поскольку совпадение с идентификатором всегда является наиболее эффективным.

Тогда все, что вам нужно сделать, это совпадение с классом, разобрать строку на число и добавить их. Я создал простой пример для вас ниже

http://jsfiddle.net/Phunky/Vng7F/

Но то, что вы не ясно, как ваше ожидает получить значение класса тд, если это динамический и может меняться вы могли бы сделать он гораздо более универсален, но, надеюсь, это даст вам немного понимания о том, куда идти отсюда.

Смежные вопросы