2013-02-11 1 views
0

Я создаю список задач с родительскими и дочерними задачами. Они выложены в упорядоченном списке и вложены в много уровней, поэтому родительская задача может также иметь дочерние задачи и родительские задачи.JQuery collect Сумма значений внутри каждого вложенного раздела

Пример:

<div class="item-list"> 
    <ol> 
    <li class="parent"> 
     <div class="title">Im a task</div> 
     <div class="totalhours">total child hours here please</div> 
     <ol> 
      <li> 
      <div class="title">Im a task</div> 
      <div class="hours">5</div> 
      </li> 
      <li> 
      <div class="title">Im a task</div> 
      <div class="hours">10</div> 
      </li> 
      <li class="parent"> 
      <div class="title">Im a task</div> 
      <div class="totalhours">total child hours here please</div> 
      <ol> 
      <li> 
       <div class="title">Im a task</div> 
       <div class="hours">5</div> 
      </li> 
      <li> 
       <div class="title">Im a task</div> 
       <div class="hours">10</div> 
      </li> 
      </ol> 
     </li> 
     </ol> 
    </li> 
    <li>Another task thats not a parent on this level</li> 
    </ol> 
    </div> 

Таким образом, каждый уровень, я хотел бы иметь в общей сложности всех вложенных элементов. Таким образом, самая главная задача для родителей включает в себя часы ВСЕГО НЕСТАВАЯ часов div, а затем, если вы развернете его, каждый вложенный родитель делает то же самое для всех своих вложенных часов и так далее.

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

var totalest = $('li.parent .totalhours'); 

    var sum = 0; 

    $("li .hours").each(function() { 
     var val = $.trim($(this).text()); 

     if (val) { 
      val = parseFloat(val.replace(/^\$/, "")); 

      sum += !isNaN(val) ? val : 0; 
     } 

     totalest.html(sum); 
    }); 

Я надеюсь на этот результат

  • Я задача Родителя 30 часов
    • Im Целевых 5 часов
    • Im Целевые 10 часов
    • Im Родительская задача 15 часов
      • Im задача 5 часов
      • Im задача 10 часов
  • Я другой родитель задачу 20 часов
    • Im Целевых 5 часов
    • Im Целевых 5 часов
    • Im Родитель задача 10 часов
      • Im задача 5 часов
      • Im задача 5 часов

ответ

2

Петля через каждый родитель и добавить часы только для этого родителя.

$(".parent").each(function() { 
    var sum = 0; 
    $(".hours", this).each(function() { 
    var val = $.trim($(this).text()); 

    if (val) { 
     val = parseFloat(val.replace(/^\$/, "")); 

     sum += !isNaN(val) ? val : 0; 
    } 

    }); 
    $(this).find('.totalhours').html(sum); 
}); 

http://jsfiddle.net/qqhD6/

+0

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

+0

Протестировано в jsfiddle, кажется, работает правильно – jsweazy

+0

Это получилось совершенно на самом деле. Моя проблема, я думаю, в том, что изначально у меня не было отдельных часовых занятий. У меня были отдельные контейнеры, и он должен был запутаться. Такие, как .parent-details .hours и .child-details .hours Еще раз спасибо! @jsweazy – Koldsnapz

0

Хитрость заключается в том, чтобы объем его каждому из родителей.

$('.parent').each(function(){ 
    var parent = $(this), 
     total = parent.find('.totalHours'), 
     sum = 0; 

    parent.find('.hours').each(function(){ 
     var hours = $(this), 
      text = $.trim(hours.text()), 
      value = parseFloat(value); 

     sum += !isNaN(value)?value:0; 
    }); 

    total.html(sum); 
}); 
+0

Я не мог заставить это работать вообще, я вижу, что вы собираетесь делать, хотя и похоже на jsweazy, так что пытайтесь каким-то образом объединить эти два, чтобы сделать эту работу. @Nico – Koldsnapz

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

  • Нет связанных вопросов^_^