Вложенная таблица с таблицами данных - PullRequest
2 голосов
/ 31 марта 2020

У меня есть следующая вложенная таблица HTML. Я использую Datatables API, чтобы сделать мои таблицы доступными для поиска. Одна проблема, с которой я столкнулся, связана с вложенными таблицами. Я не уверен, как сделать вложенные таблицы доступными для поиска? Я попытался добавить дополнительные теги ID в код вложенных таблиц HTML и добавить их в вызов кода dataTables JS, но это не сработало. Любая идея, как сделать подстоли для поиска?

<link href="https://cdn.datatables.net/1.10.20/css/jquery.dataTables.min.css" rel="stylesheet" />
<script src="https://code.jquery.com/jquery-3.3.1.js"></script>
<script src="https://cdn.datatables.net/1.10.20/js/jquery.dataTables.min.js"></script>


<script>
  $(document).ready(function() {
    $('#example').DataTable();
} );
</script>


<div class="container">
    <table id="example" class="table table-striped">
        <thead>
            <tr>
                <th>Image</th>
                <th>Date</th>
                <th>TC NAME</th>
                <th>NS FLOW</th>
                <th>SN FLOW</th>
                <th>NS FLOW</th>
                <th>SN FLOW</th>
                <th>NS FLOW</th>
                <th>SN FLOW</th>
            </tr>
        </thead>
        <tbody>

            <tr>
                <td>721</td>
                <td>3/15/20</td>

                <td>
                    <table id="example1" class="table table-nostriped">
                        <tr>
                            <td>TC1</td>
                        </tr>
                        <tr>
                            <td>TC2</td>
                        </tr>
                        <tr>
                            <td>TC3</td>
                        </tr>
                    </table>

                </td>

                <td>
                 <table class="table table-nostriped">
                        <tr>
                            <td>100</td>
                        </tr>
                        <tr>
                            <td>300</td>
                        </tr>
                        <tr>
                            <td>600</td>
                        </tr>
                    </table>
                </td>

                <td>
                 <table class="table table-nostriped">
                        <tr>
                            <td>100</td>
                        </tr>
                        <tr>
                            <td>800</td>
                        </tr>
                        <tr>
                            <td>400</td>
                        </tr>
                    </table>
                </td>

                <td>
                 <table class="table table-nostriped">
                        <tr>
                            <td>100</td>
                        </tr>
                        <tr>
                            <td>200</td>
                        </tr>
                        <tr>
                            <td>300</td>
                        </tr>
                    </table>
                </td>

                <td>
                 <table class="table table-nostriped">
                        <tr>
                            <td>100</td>
                        </tr>
                        <tr>
                            <td>300</td>
                        </tr>
                        <tr>
                            <td>200</td>
                        </tr>
                    </table>
                </td>


                <td>
                 <table class="table table-nostriped">
                        <tr>
                            <td>200</td>
                        </tr>
                        <tr>
                            <td>200</td>
                        </tr>
                        <tr>
                            <td>200</td>
                        </tr>
                    </table>
                </td>

                <td>
                 <table class="table table-nostriped">
                        <tr>
                            <td>100</td>
                        </tr>
                        <tr>
                            <td>200</td>
                        </tr>
                        <tr>
                            <td>300</td>
                        </tr>
                    </table>
                </td>

            </tr>





        <tr>
                <td>722</td>
                <td>3/16/20</td>

                <td>
                    <table class="table table-nostriped">
                        <tr>
                            <td>TC1</td>
                        </tr>
                        <tr>
                            <td>TC2</td>
                        </tr>
                        <tr>
                            <td>TC3</td>
                        </tr>
                    </table>

                </td>

                <td>
                 <table class="table table-nostriped">
                        <tr>
                            <td>200</td>
                        </tr>
                        <tr>
                            <td>300</td>
                        </tr>
                        <tr>
                            <td>600</td>
                        </tr>
                    </table>
                </td>

                <td>
                 <table class="table table-nostriped">
                        <tr>
                            <td>100</td>
                        </tr>
                        <tr>
                            <td>800</td>
                        </tr>
                        <tr>
                            <td>400</td>
                        </tr>
                    </table>
                </td>

                <td>
                 <table class="table table-nostriped">
                        <tr>
                            <td>100</td>
                        </tr>
                        <tr>
                            <td>200</td>
                        </tr>
                        <tr>
                            <td>300</td>
                        </tr>
                    </table>
                </td>

                <td>
                 <table class="table table-nostriped">
                        <tr>
                            <td>100</td>
                        </tr>
                        <tr>
                            <td>300</td>
                        </tr>
                        <tr>
                            <td>200</td>
                        </tr>
                    </table>
                </td>


                <td>
                 <table class="table table-nostriped">
                        <tr>
                            <td>200</td>
                        </tr>
                        <tr>
                            <td>200</td>
                        </tr>
                        <tr>
                            <td>200</td>
                        </tr>
                    </table>
                </td>

                <td>
                 <table class="table table-nostriped">
                        <tr>
                            <td>100</td>
                        </tr>
                        <tr>
                            <td>200</td>
                        </tr>
                        <tr>
                            <td>300</td>
                        </tr>
                    </table>
                </td>

            </tr>




        <tr>
                <td>633</td>
                <td>3/17/20</td>

                <td>
                    <table class="table table-nostriped">
                        <tr>
                            <td>TC1</td>
                        </tr>
                        <tr>
                            <td>TC2</td>
                        </tr>
                        <tr>
                            <td>TC3</td>
                        </tr>
                    </table>

                </td>

                <td>
                 <table class="table table-nostriped">
                        <tr>
                            <td>300</td>
                        </tr>
                        <tr>
                            <td>300</td>
                        </tr>
                        <tr>
                            <td>600</td>
                        </tr>
                    </table>
                </td>

                <td>
                 <table class="table table-nostriped">
                        <tr>
                            <td>100</td>
                        </tr>
                        <tr>
                            <td>800</td>
                        </tr>
                        <tr>
                            <td>400</td>
                        </tr>
                    </table>
                </td>

                <td>
                 <table class="table table-nostriped">
                        <tr>
                            <td>100</td>
                        </tr>
                        <tr>
                            <td>200</td>
                        </tr>
                        <tr>
                            <td>300</td>
                        </tr>
                    </table>
                </td>

                <td>
                 <table class="table table-nostriped">
                        <tr>
                            <td>100</td>
                        </tr>
                        <tr>
                            <td>300</td>
                        </tr>
                        <tr>
                            <td>200</td>
                        </tr>
                    </table>
                </td>


                <td>
                 <table class="table table-nostriped">
                        <tr>
                            <td>200</td>
                        </tr>
                        <tr>
                            <td>200</td>
                        </tr>
                        <tr>
                            <td>200</td>
                        </tr>
                    </table>
                </td>

                <td>
                 <table class="table table-nostriped">
                        <tr>
                            <td>100</td>
                        </tr>
                        <tr>
                            <td>200</td>
                        </tr>
                        <tr>
                            <td>300</td>
                        </tr>
                    </table>
                </td>

            </tr>

        </tbody>
    </table>
</div>

1 Ответ

0 голосов
/ 31 марта 2020

Если вы под словом «поиск» подразумеваете DataTables внутри DataTables, вы можете использовать обратный вызов createdRow для инициализации таблиц внутри столбцов <tr>.

Для того, чтобы компенсировать отсутствующие <thead> во вложенных таблицах (исключая ошибку TypeError: col не определена ошибка):

const columns = [
  { title: '' },
]

Инициировать вложенные таблицы в обратном вызове createdRow:

let table = $('#example').DataTable({
  createdRow: function(row) {
    $(row).find('td table')
      .DataTable({
        columns: columns,
        dom: 'tf'
      })
  }
})

Обратите внимание на раздел dom. Здесь показаны только сама таблица и поле фильтра. Вы можете удалить заголовок с помощью

table.dataTable td table thead {
  display: none;
}

Не добавляйте это CSS, если вы хотите сортировать столбцы во вложенных таблицах.

демонстрация с использованием рассматриваемой разметки -> http://jsfiddle.net/davidkonrad/8pzkr6yn/


Обновление . Если вас интересует только возможность поиска по содержимому вложенных таблиц (например, разметка HTML), просто определите соответствующие столбцы type как 'html' (https://datatables.net/reference/option/columns.type) :

let table = $('#example').DataTable({
  columnDefs: [
    { targets: [2,3,4,5,6,7], type: 'html' },
  ],
  ...
})
...