0

親タスクと子タスクを含むタスク リストを作成しています。それらは順序付けられたリストに配置され、多くのレベルの深さでネストされているため、親タスクは子タスクと親タスクを内部に持つことができます。

例:

    <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 の時間が含まれ、それをドリルダウンすると、ネストされた各親は、ネストされたすべての時間に対して同じことを行います。

これは私が現在使用しているものであり、ネストされて同じ数字をどこにでも配置するのではなく、1時間ごとの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); 
    });

この結果に期待したい

  • I'm a Parent タスク 30 時間
    • 私はタスク5時間
    • 私はタスク10時間
    • 親タスク 15 時間
      • 私はタスク5時間
      • 私はタスク10時間
  • I'm another Parent タスク 20 時間
    • 私はタスク5時間
    • 私はタスク5時間
    • 親タスク 10 時間
      • 私はタスク5時間
      • 私はタスク5時間
4

2 に答える 2

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/

于 2013-02-11T21:39:43.547 に答える
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);
});
于 2013-02-11T21:39:53.450 に答える