Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Собрать все одинаковые классы и атрибуты умножить и сложить (https://javascript.ru/forum/jquery/64132-sobrat-vse-odinakovye-klassy-i-atributy-umnozhit-i-slozhit.html)

fatklass 21.07.2016 14:36

Собрать все одинаковые классы и атрибуты умножить и сложить
 
Добрый день,
есть таблица надо обойти все tr c class="offer_container" каждый атрибут data-wanted_wood="150" умножить на data-count="2" затем наверное записать в массив и массив сложить.
Как то так должно получиться: ((150*2)+(0*1)+(150*1))=450

Например я вот получаю значения первого offer_container умножаю атрибуты получаю результат, а как теперь пройтись циклом по всем остальным и получить сумму всех?
wood = $(".offer_container").attr('data-wanted_wood');
woodcount = $(".offer_container").attr('data-count');
result = wood*woodcount;
console.log(result);


Помогите пожалуйста.


<table class="vis" id="own_offers_table">
<tr class="offer_container " id="offer_49051" data-id="49051" data-count="2" data-wanted_wood="150" data-wanted_stone="0" data-wanted_iron="0">

<tr class="offer_container " id="offer_49052" data-id="49052" data-count="1" data-wanted_wood="0" data-wanted_stone="150" data-wanted_iron="0">

<tr class="offer_container " id="offer_49053" data-id="49053" data-count="1" data-wanted_wood="150" data-wanted_stone="0" data-wanted_iron="0">
</table>

laimas 21.07.2016 14:50

$(".offer_container").each(function() {
    //здесь значения каждого обрабатывать
})

рони 21.07.2016 14:54

fatklass,
http://api.jquery.com/each/

рони 21.07.2016 15:01

fatklass,
<!DOCTYPE html>

<html>
<head>
  <title>Untitled</title>
  <meta charset="utf-8">
 </head>

<body>
<table class="vis" id="own_offers_table">
<tr class="offer_container " id="offer_49051" data-id="49051" data-count="2" data-wanted_wood="150" data-wanted_stone="0" data-wanted_iron="0"></tr>

<tr class="offer_container " id="offer_49052" data-id="49052" data-count="1" data-wanted_wood="0" data-wanted_stone="150" data-wanted_iron="0"></tr>

<tr class="offer_container " id="offer_49053" data-id="49053" data-count="1" data-wanted_wood="150" data-wanted_stone="0" data-wanted_iron="0"></tr>
</table>

<script>
window.addEventListener('DOMContentLoaded', function() {
  var nodes = document.querySelectorAll('.offer_container'),
  sum = [].reduce.call( nodes, function(sum, tr) {
            return sum += tr.dataset.count * tr.dataset.wanted_wood
     },0);
  alert(sum)
  });
</script>
</body>
</html>

fatklass 21.07.2016 15:34

Цитата:

Сообщение от рони (Сообщение 422908)

Спасибо, сделал так:
var values = new Array(); 
$(".offer_container").each(function() {
   values.push($(this).attr('data-wanted_wood')*$(this).attr('data-count')); 
});

var sum=0;
for(var i=0;i<values.length;i++){
    sum = sum + parseInt(values[i]);
}
console.log(sum);

рони 21.07.2016 15:48

fatklass,
для атрибута data-... в jquery есть метод data();
parseInt не нужен , у вас было умножение ранее, второй цикл избыточен.
<!DOCTYPE html>

<html>
<head>
  <title>Untitled</title>
  <meta charset="utf-8">
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
  <script>
$(function() {
var sum = 0;
$(".offer_container").each(function() {
   var data = $(this).data()
   sum += data.wanted_wood * data.count;
});
alert(sum)


});
  </script>
</head>

<body>
<table class="vis" id="own_offers_table">
<tr class="offer_container " id="offer_49051" data-id="49051" data-count="2" data-wanted_wood="150" data-wanted_stone="0" data-wanted_iron="0"></tr>

<tr class="offer_container " id="offer_49052" data-id="49052" data-count="1" data-wanted_wood="0" data-wanted_stone="150" data-wanted_iron="0"></tr>

<tr class="offer_container " id="offer_49053" data-id="49053" data-count="1" data-wanted_wood="150" data-wanted_stone="0" data-wanted_iron="0"></tr>
</table>

</body>
</html>


Часовой пояс GMT +3, время: 11:53.