Как получить выбранные значения строк из таблицы

Я преобразую таблицу HTML в массив и передаю его контроллеру для вставки нескольких строк. Я могу создать массив, но проблема в том, что он создает полный массив таблиц, но я хочу получить tdтолько выбранные значения строк.

//function to convert HTML table to  array//
var HTMLtbl = {
    getData: function (table) {
        var data = [];
        table.find('tr').not(':first').each(function(rowIndex, r) {
            var cols = [];

            // I believe the main problem is here:
            $(this).find('td').each(function(colIndex, c) {
                cols.push($(this).text().trim());
            });
            data.push(cols);
        });
        return data;
    }
}

$(document).on('click', '#btnsave', function() {
    var data = HTMLtbl.getData($('#tblresult'));
    var parameters = {};
    parameters.array = data;

    var request =  $.ajax({
        async: true,
        cache: false,
        dataType: "json",
        type: "POST",
        contentType: "application/json; charset=utf-8",
        url: "../Home/Save_SearchCarsDocs",        
        data: JSON.stringify(parameters)
    });
    request.done(function(msg) {
        alert("Row saved " + msg.d);
    });

2 ответа

  1. Вы можете попробовать следовать…

        //function to convert HTML table to  array//
       var excludedTD_Index = [0,5,7]; // define what you want to exclude by index
        var HTMLtbl = {
            getData: function (table) {
                var data = [];
                table.find('tr').not(':first').each(function(rowIndex, r) {
                    var cols = [];
    
                    // I believe the main problem is here:
                    $(this).find('td').each(function(colIndex, c) {
                        if(excludedTD_Index.indexOf(colIndex) >=0) // exclude TD
                        continue;
                        cols.push($(this).text().trim());
                    });
                    data.push(cols);
                });
                return data;
            }
        }
    
        $(document).on('click', '#btnsave', function() {
            var data = HTMLtbl.getData($('#tblresult'));
            var parameters = {};
            parameters.array = data;
    
            var request =  $.ajax({
                async: true,
                cache: false,
                dataType: "json",
                type: "POST",
                contentType: "application/json; charset=utf-8",
                url: "../Home/Save_SearchCarsDocs",        
                data: JSON.stringify(parameters)
            });
            request.done(function(msg) {
                alert("Row saved " + msg.d);
            });
    

    Или вы можете сделать его более управляемым, если вы можете добавить следующие данные к тегу TD

    <td data-exclude="1"> 
    ...
    

    после добавления вышеуказанных данных можно исключить следующие столбцы

     var HTMLtbl = {
            getData: function (table) {
                var data = [];
                table.find('tr').not(':first').each(function(rowIndex, r) {
                    var cols = [];
    
                    // I believe the main problem is here:
                    $(this).find('td').each(function(colIndex, c) {
                        if($(this).data("exclude") == 1) // exclude TD
                        continue;
                        cols.push($(this).text().trim());
                    });
                    data.push(cols);
                });
                return data;
            }
        }
    
  2. спасибо Rory McCrossan наконец получить мой ответ я добавляю мое решение ниже

         var CB=1;
    var HTMLtbl =
        {
            getData: function (table) {
                var data = [];
    
                table.find('tr').not(':first').each(function (rowIndex, r) {
                    if ($("#chk_" + CB).is(':checked'))
                        {
                        var cols = [];
                        $(this).find('td').each(function (colIndex, c) {                      
                            cols.push($(this).text().trim());     
    
                        });
                        data.push(cols);
                    }
                    CB++;
                });
                CB = 1;
                return data;
    
            }
        }