Как создать Json данные из динамически генерируемой таблицы c? - PullRequest
0 голосов
/ 28 апреля 2020

Я создал одну исходную таблицу, которая является stati c. вторая таблица - это агрегатор, который генерируется из основной таблицы (id="aggregator-table") и добавляется к другому div с новой таблицей id. Я хочу сгенерировать JSON из этих динамических c таблиц. Я хочу игнорировать значение флажка, а также заголовки кулака, которые являются <thead> данными. чтобы получить значение таблицы, я использовал здесь атрибут данных, чтобы получить все таблицы. Я пытался сгенерировать JSON, но это не правильно генерирует. В совокупности я могу создать несколько строк, чтобы заполнить данные. Так как сгенерировать JSON из нескольких строк и игнорировать кнопку флажка n из таблицы? любой намек?

// ==================== //
// Add aggregate Table//
// ==================== //

var aggTableNum = 0;
$('.addAggregatorCompo').click(function (e) {
  const originTable = document.getElementById('aggregator-table');
  let newTable = originTable.cloneNode(true);
  newTable.id = 'newAggTable' + ++aggTableNum;
  newTable.querySelectorAll('input').forEach((element) => {
    element.value = '';
  });
  $('#main-div').append(newTable);
});

// ==================== //
// Delete Component //
// ==================== //

$('#main-div').on('click', '.delete-component', function(e) {
  e.preventDefault(); // in case it is not a type=button and the table is wrapped in a form
  this.closest('table').remove();
});

// ==================== //
// Delete Records//
// ==================== //

$('#main-div').on('click', '.delete-record-aggregator', function() {
  $('table tbody')
    .find('input[name="record"]')
    .each(function() {
      if ($(this).is(':checked')) {
        $(this).parents('tr').remove();
      }
    });
});

// ==================== //
// Add Aggregate records //
// ==================== //

$('#main-div').on('click', '.add-record', function() {
  let $tbody = $(this).closest('table').find('tbody');
  $('<tr>')
    .append($('<td>').append('<input type="checkbox" name="record">'))
    .append($('<td>').append('<input type="text" value="lorem ipsum" />'))
    .append($('<td>').append('<input type="text" value="lorem ipsum" />'))
    .append($('<td>').append('<input type="text" value="lorem ipsum" />'))
    .append($('<td>').append('<input type="text" value="lorem ipsum" />'))
    .appendTo($tbody);
});

$('#createJSON').click(function() {
    $('#main-div .component-base').each(function() {
        console.log(this);
        // console.log($(this));
        if ($(this).data('component-type') == 'source') {
            console.log('Process source');
            var newFormData = [];
            jQuery('#source-table tr:not(:first)').each(function(i) {
                var tb = jQuery(this);
                var obj = {};
                tb.find('input').each(function() {
                    obj[this.name] = this.value;
                });
                obj['row'] = i;
                newFormData.push(obj);
            });
            console.log(newFormData);
        } else if ($(this).data('component-type') == 'aggregator') {
            console.log('Process Agg');

            var newFormData = [];
            jQuery('#aggregator-table1 tr:not(:first)').each(function(i) {
                var tb = jQuery(this);
                var obj = {};
                tb.find('input').each(function() {
                    obj[this.name] = this.value;
                });
                obj['row'] = i;
                newFormData.push(obj);
            });
            console.log(newFormData);
        } 
    });
});
#aggregator-table {
  display: none;
}

table {
  border-collapse: collapse;
  margin: 1em;
}
thead {
  background-color: lightblue;
}
td,
th {
  border: solid grey 1px;
  padding: 1em;
  text-align: center;
}
     <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
     
     <button style="margin: 1%;" class="addAggregatorCompo">
                        Add Aggregator
                    </button>
                    <button style="margin: 1%;" id="createJSON">Create JSON</button>
                    <table id="aggregator-table" class="component-base" data-component-type="aggregator">
                    <thead>
                        <th colspan="6">Aggregator</th>

                        <tr>
                            <th>Select</th>
                            <th>Column Name</th>
                            <th>Function</th>
                            <th>Alias</th>
                            <th>Order</th>
                        </tr>
                    </thead>
                    <tbody>
                        <tr>
                            <td><input type="checkbox" name="record" /></td>
                            <td>
                                <input id="column-name" name="column-name" placeholder="Column Name" />
                            </td>
                            <td>
                                <input id="function" name="function" placeholder="Function" />
                            </td>
                            <td>
                                <input id="alias" name="alias" placeholder="Alias" />
                            </td>
                            <td>
                                <input id="order" name="order" placeholder="Order" />
                            </td>
                        </tr>
                        <tr></tr>
                    </tbody>

                    <tfoot>
                        <tr>
                            <td>
                                <button class="add-record" style="margin:
                                        1%;">
                                        Add Properties
                                    </button>
                            </td>
                            <td>
                                <button class="delete-component" style="margin: 1%;">
                                        Delete Table
                                    </button>
                            </td>
                            <td>
                                <button class="delete-record-aggregator" style="margin: 1%;">
                                        Delete Record
                                    </button>
                            </td>
                        </tr>
                    </tfoot>
                </table>
                 <div class="main-div" id="main-div">
            <!-- ----------------- -->
            <!-- Source Table -->

            <table id="source-table" data-component-type="source" class="component-base">
                <thead>
                    <tr>
                        <th colspan="5">Source</th>
                    </tr>

                    <tr>
                        <th>Type</th>
                        <th>Name</th>
                        <th>Location</th>
                        <th>Schema</th>
                    </tr>
                </thead>
                <tbody>
                    <tr>
                        <td>
                            <input id="type" name="type" placeholder="Type" />
                        </td>
                        <td><input id="Name" name="Name" placeholder="Name" /></td>
                        <td>
                            <input id="location" name="location" placeholder="Location" />
                        </td>
                        <td>
                            <input id="schema" name="schema" placeholder="Schema" />
                        </td>
                    </tr>
                </tbody>
                <tfoot>
                    <tr>
                        <td>
                            <button class="delete-component" style="margin:
                                    1%;">
                                    Delete Table
                                </button>
                        </td>
                    </tr>
                </tfoot>
            </table>
        </div>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...