jQuery сумма значений из пунктов выше - PullRequest
0 голосов
/ 21 декабря 2009

У меня небольшая проблема.

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

var time = $(ui.draggable).attr("time");

теперь мы получили 4 позиции со временем следующим образом:

  1. 432 с
  2. 123 с
  3. 5634 с
  4. 654 с

Теперь я хочу подвести итог так:

1. 432
2. 432+123
3. 432+123+5634
4. 432+123+5634+654

Есть идеи, как мне это сделать?

Это мой код:

$(document).ready(function(){

    $(".trash").sortable({
        tolerance: 'touch',
        receive: function (event, ui) {
        ui.item.remove();
           }
    });
    $(".DragContainer_dest").sortable({helper:'clone',
        opacity: 0.5,
        connectWith: '.trash',
        scroll: true,
        update : function () { 
        var order = $('.DragContainer_dest').sortable('serialize',{key:'string'}); 
        $.post('includes/ajaxify.php',order+'&action=update');    
        var time = $(this).attr("time");
        },
        out : function () { 
            ui.item.remove();
        }
    });

    $("div[class=DragContainer] .DragBox").draggable({helper:'clone'}); 

    $(".DragContainer_dest").droppable({
        accept: ".DragBox",
        tolerance: "touch",
        drop: function(ev, ui) {
           $(this).append($(ui.draggable).clone().addClass("added"));  
        }
    });
  });

Я хочу, чтобы каждый элемент, удаленный или отсортированный в DragContainer_dest, суммировал значения других элементов над ним Можно ли это сделать?

Ответы [ 3 ]

1 голос
/ 21 декабря 2009

Как я понимаю, вам нужно собрать всех братьев и сестер узла, которые находятся перед рассматриваемым элементом, и собрать их атрибуты. Давайте попробуем это:

var nodeSiblings = $(this).parent().children();
// We need to find the index of our element in the array
var stopIndex = nodeSiblings.index(this);
var time = 0;

nodeSiblings.each( function(index, element){
    if (index > stopIndex) return;
    var attribute = parseInt($(element).attr("time"), 10);
    if (!isNaN(attribute)) time += attribute;
});

// Here you have the sum of all time attributes
alert(time);
0 голосов
/ 21 декабря 2009

Если вы используете parseInt, как указано в другом месте, не забудьте включить основание:

parseInt($(ul.draggable).attr('time'), 10);

Если в начале у вас есть ноль, он будет считаться восьмеричным, если вы не укажете основание.

0 голосов
/ 21 декабря 2009

Может быть, добавить глобальную переменную timeSum, а затем увеличить ее для каждого отброшенного элемента?

var timeSum = 0;

$(".DragContainer_dest").droppable({
    drop: function(ev, ui) {
       timeSum += parseInt($(ul.draggable).attr('time'));
    }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...