#javascript #jquery #html
#javascript #jquery #HTML
Вопрос:
У меня есть таблица с разными <td>
именами классов. Мне нужно добавить / суммировать каждое из них для одного общего значения. Я могу сделать это легко, если у всех них одинаковое имя класса, но я не могу понять, как это сделать с разными классами. Итак, в приведенном ниже примере таблицы мне нужно добавить .price1 .price2 .price3 и отобразить результаты в #result .
HTML:
<table id="tableOrderTotal" class="table tableTotal">
<tbody>
<tr>
<td>Item1</td>
<td class="price1">5</td>
</tr>
<tr>
<td>Item2</td>
<td class="price2">15</td>
</tr>
<tr>
<td>Item3</td>
<td class="price3">25</td>
</tr>
<tr class="summary">
<td class="totalOrder">Total:</td>
<td id="result" class="totalAmount"></td>
</tr>
</tbody>
</table>
Ответ №1:
попробуйте этот селектор, используйте подстановочные знаки
$("[class^=price]")
код
var result=0;
$("[class^=price]").each(function(e,i){result =parseInt(i.innerHTML)});
console.log(result) // u get to see the result in console
Ответ №2:
Проще всего было бы просто добавить некоторый атрибут данных или класс, но я предполагаю, что вы не можете этого сделать. Таким образом, существует несколько возможных решений, например, мы можем выполнить селектор по tr
и получить все до последнего td
tr
или выполнить селектор по регулярному выражению. Вот пример кода.
//solution with selector by tr
var sum=0;
$('tr:not(.summary)').each(function() {
sum =parseInt( $(this).find("td").last().text() );
});
$("td#result").text(sum);
//second possibile solution is to do regular expression selector
//( get every element with class starting by "price")
var sum=0;
$('td[class^=price]').each(function() {
sum =parseInt( $(this).text() );
});
$("td#result2").text(sum);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<table id="tableOrderTotal" class="table tableTotal">
<tbody>
<tr>
<td>Item1</td>
<td class="price1">5</td>
</tr>
<tr>
<td>Item2</td>
<td class="price2">15</td>
</tr>
<tr>
<td>Item3</td>
<td class="price3">25</td>
</tr>
<tr class="summary">
<td class="totalOrder">Total:</td>
<td id="result" class="totalAmount"></td>
</tr>
<tr class="summary">
<td class="totalOrder">Total second solution:</td>
<td id="result2" class="totalAmount"></td>
</tr>
</tbody>
</table>
Комментарии:
1. Ваш 2-й вариант почти работает — однако один из классов td, которые я использую, заполняется вычисленным вычисляемым значением из выпадающего меню выбора, и это значение не включается в вычисление суммы. В принципе, когда выбрано значение из моего меню выбора, у меня есть некоторый js, который умножает выбранное значение на указанное число и заполняет класс .price1 td этим вычисленным значением. Это значение не включается в общую сумму (#результат). Остальные включены просто отлично, но вычисленное значение .price1 — нет. Есть идеи?
2. Я снова играю с вашим кодом варианта № 2 и получаю результат NaN, когда включаю свое вычисленное значение .price1 . Как я могу суммировать свои разные классы, когда еще один из классов заполняется отдельной функцией js? js, который вычисляет .price1, работает отлично — он вычисляет его в зависимости от выбора пользователя из выпадающего списка — и он отлично заполняет .price1 <td> . Однако .price1 не будет суммироваться с использованием предоставленного вами кода. Любая помощь будет принята с благодарностью. Еще раз спасибо.
Ответ №3:
Одним из предложений, более простым, является создание атрибута и некоторых с ним, что-то вроде…
<td class="price1" to-sum>5</td>
<td class="price2" to-sum>5</td>
<td class="price3" to-sum>5</td>
А затем выберите по атрибуту.
$(document).ready(function() {
var total = 0;
$('td[to-sum]').each(function(item) {
total = parseFloat($(this).text());
})
$("#result").html(total);
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<table id="tableOrderTotal" class="table tableTotal">
<tbody>
<tr>
<td>Item1</td>
<td class="price1" to-sum>5</td>
</tr>
<tr>
<td>Item2</td>
<td class="price2" to-sum>15</td>
</tr>
<tr>
<td>Item3</td>
<td class="price3" to-sum>25</td>
</tr>
<tr class="summary">
<td class="totalOrder">Total:</td>
<td id="result" class="totalAmount"></td>
</tr>
</tbody>
</table>
Ответ №4:
Вы можете использовать следующий фрагмент кода.
<script>
$(function(){
var sum = 0;
$('[class^="price"]').each(function(){
sum = sum parseInt($(this).html());
});
$('[class$="totalAmount"]').html(sum);
})
</script>
По сути, это получение текста внутри каждого td
, который class
начинается с префикса price
, а затем добавляет их все.
Наконец, он устанавливает значение text
your totalAmount
td
равным сумме, полученной ранее.
Я надеюсь, это поможет.
Ответ №5:
Учитывая, что все ваши <td>
значения html являются числами, используя jQuery:
$(document).ready(function(){
var total = 0;
total = $('#tableOrderTotal .price1').html();
total = $('#tableOrderTotal .price2').html();
total = $('#tableOrderTotal .price3').html();
$("#result").html(total);
})