Удалять элементы array в jquery

у меня есть следующая проблема, у меня есть таблица, которая наполняется с несколькими array, которые, дав ему click в кнопке, перемещают стоимость к другой таблице, до сих пор все добро, проблема, - когда я хочу снять стоимость (есть кнопка в каждой линии таблицы), выйдя ему click на стоимость, я могу удалять, но если есть 3 элемента и я удаляю первого, таблица оставляет себе ширину (length) 0 - как будто он удалял все следующие, такие реестры, если я удаляю 2-ой реестр, удаляются следующие, я оставляю им часть кода:

<script type="text/javascript">

        var cont=0;
        var total=0;
        var arr_canti=[];
        var arr_id_bodega_producto=[];
        var arr_precio = [];
        var arr_subtotal = [];
        var v_id_bodega_producto = 0; 
        var v_producto =  "";
        var v_existencia = 0;
        var v_pre1 = 0;
        var v_pre2 = 0;
        var v_pre3 = 0;
        var v_pre4 = 0;
        var v_pre0 = 0;
        var v_canti = 0;
        var v_precio = 0;
        var v_id_del = 0;
    $(document).ready(function(){
        $('.agregar_fila').click(function(){
            document.getElementById('caja3').style.display='block';

            v_id_bodega_producto = $(this).parent().parent().find('input#val_id_bodega_producto').attr('value'); 
            v_producto =  $(this).parent().parent().find('input#val_producto').attr('value');
            v_existencia = parseInt($(this).parent().parent().find('input#val_existencia').attr('value'));
            v_pre1 = $(this).parent().parent().find('input#val_pre1').attr('value');
            v_pre2 = $(this).parent().parent().find('input#val_pre2').attr('value');
            v_pre3 = $(this).parent().parent().find('input#val_pre3').attr('value');
            v_pre4 = $(this).parent().parent().find('input#val_pre4').attr('value');
            v_pre0 = $(this).parent().parent().find('input#val_pre_farm').attr('value');


            $('#pre_producto').val(v_producto);
            $('#pre_existencia').val(v_existencia);
            $('#desc1').html(v_pre1);
            $('#desc2').html(v_pre2);
            $('#desc3').html(v_pre3);
            $('#desc4').html(v_pre4);
            $('#desc0').html(v_pre0);

            $('#des0').val(v_pre0);
            $('#des1').val(v_pre1);
            $('#des2').val(v_pre2);
            $('#des3').val(v_pre3);
            $('#des4').val(v_pre4);
        });
    });
    function quitar(){
        v_id_del = $(this).parent().parent().find('td:eq(0)').text();
        /*arr_canti.splice(v_id_del,1);
        arr_precio.splice(v_id_del,1);
        arr_id_bodega_producto.splice(v_id_del,1);
        arr_subtotal.splice(v_id_del,1);
        $(this).parent().parent().remove();*/
        //$(this).parent().parent().empty();
        alert("el id es "+v_id_del);
    }
    $(document).ready(function(){
        $('.quitar_fila').click(function(){
            alert("hizo click");
            //quitar();
        });
    });

    $(document).ready(function(){
        $('#btn_agr').click(function(){
            agregar();
        });
    });
    function agregar(){
        v_canti = $('#canti').val();
            v_precio = $("input[name='descuento']:checked").val();
            //alert("los valores son v_canti: "+v_canti+" id: "+v_id_bodega_producto+" v_precio: "+v_precio+" contador  "+cont+" v_existencia "+v_existencia+" total "+total);
            if(v_canti>0 && v_canti<=v_existencia)
            {

                arr_canti.push(v_canti);    
                arr_precio.push(v_precio);
                arr_id_bodega_producto.push(v_id_bodega_producto);
                arr_subtotal.push(arr_canti[cont]*arr_precio[cont]);
                total+=arr_subtotal[cont];
                var fila = '<tr id="no_fila'+cont+'" name="filas[]" "><td style="display:none;">'+cont+'</td><td>'+arr_canti[cont]+'</td><td>'+v_producto+'</td><td>'+arr_subtotal[cont]+'</td><td><a href="#" class="quitar_fila"><i class="fas fa-minus-square" style="font-size:50px; color: #c23235;"></i></a></td></tr>';
                $('#articulo3').append(fila);
                cont++;
                document.getElementById('subtotal').value = total;
                $('#caja3').hide();
            }
            else{
                alert("Cantidad Invalida");
            }
    }
    $(document).ready(function(){
        $('#btn_bor').click(function(){
            $('#caja3').hide();
        });
    });
</script>

Спасибо за комментарии, возможно для больше объяснения, я не хочу удалить только стоимость, храню стоимость в array и потом показываю их в inputs (это опциональное, но если я хочу их в таблице) тогда, помимо снимания стоимости в array, нуждаюсь в том, чтобы снять Вашу соответствующую линию (со всем и td)

-1
задан 20.09.2019, 06:46
1 ответ

не, поскольку это точно твоя структура, но я оставляю тебе пример, как ты обрезал перемещать стоимость array и Вашей соответствующей линии.

var array = [
    ["1","dato numero 1"],
    ["2","dato numero 2"],
    ["3","dato numero 3"],
    ["4","dato numero 4"],
    ["5","dato numero 5"],
    ["6","dato numero 6"],
    ["7", "dato numero 7"],
    ["8", "dato numero 8"],
    ["9", "dato numero 9"]
];

for (i = 0; i < array.length; i++){
  $("#tabla").append("<tr><td>"+ array[i][0]+"</td><td>"+ array[i][1]+"</td><td><button type='button' onclick='remove(event)'>remover</button></td></tr>");
}

function remove(e) {
  var tr = $(e.target).closest("tr");
  if( $(tr).index() >= 0) {
      array.splice($(tr).index(),1);
  }
  $(tr).remove();
  console.log(JSON.stringify(array));
}
table,th,td {
  border: 1px solid black;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<table id="tabla">
</table>

, когда ты добавляешь твои подмостки dinamicamente, он добавляет кнопку, у которой был бы признак onclick, и которая назвала она funciГіn remove() и произошла с ним как аргумент event: <button type="button" onclick="remove(event)">borrar</button>

в ней funciГіn remove(), который является той, которая интересует нас, мы делаем следующее:

  1. мы берем row элемента благодаря ей funciГіn jQuery .closest(), что то, что он делает, состоит в том, чтобы искать имя tag более близкого, что recive как аргумент, в этом случае мы перемещаем его TR, и приносит нас прямо к Вашему отцу.
  2. мы берем индекс row, что мы получили в предыдущем шаге благодаря ей funciГіn .index()
  3. , если индекс превосходящий 0, мы использовали метод splice говоря ему, чтобы он удалил элемент, который находится в индексе и такой, как второй аргумент, мы говорим ему, чтобы он удалил только 1 элемент, тогда это у нас осталось бы так сейчас нам не хватает array.splice(indice,1)
  4. только перемещать полную линию, а именно наше tr, я одеваю, что в шаге номер 1 мы сохраняем элемент в переменной tr, мы используем ее funciГіn .remove() и его у нас осталось бы $(tr).remove()

я надеюсь, что он может помогать в кого-то

0
ответ дан 03.12.2019, 01:35