Ключ к решению этой проблемы, который никто на самом деле не рассматривал, заключается в следующем: как указано в вопросе, мы используем DataTables в режиме serverSide
.Он имеет нумерацию страниц, и когда вы нажимаете на каждую страницу, он делает отдельный запрос AJAX, чтобы загрузить только данные для этой страницы.Так, например, если вы щелкнете по странице 2, 3, 4, он сделает 3 отдельных запроса ajax - по одному на страницу.В этом и заключается проблема - если вы хотите прокрутить строку 999, вы должны ответить на вопрос "на какой странице появляется строка 999" ?
Единственный способ, которым вы можете сделатьэто вызывает серверный скрипт, который вычислит номер страницы и вернет его js, используемому приложением .Причина, по которой это необходимо, заключается в том, что если, например, вы были на странице 1, а строка 999 оказалась на странице 4, у вас нет строк для страницы 4 где-либо в DOM;на самом деле у вас их не будет вообще, пока вы не нажмете на страницу 4 на нумерации страниц.
Итак, первое, что нужно сделать, это сделать ajax-запрос к конечной точке, которая вычисляет номер этой страницы и возвращает целое число. Как рассчитывается номер страницы, зависит от приложения .@Sascha Gottfried как бы намекнул на это в своем ответе.В нашем приложении строки не являются последовательными , т.е. вы можете иметь row_999
, за которыми следует row_1052
:
Если они последовательные Вы можете сделать что-то эквивалентное ceil(999/250)
, которое сообщит вам, что строка 999 появляется на странице 4, когда на странице 250 записей.
Если они НЕ последовательные (как в моем случае), конечная точка должна обеспечивать средства для ее расчета.Там нет четкого ответа на то, как вы это делаете.В нашем приложении это зависит от нескольких параметров поиска / фильтрации, что может привести к тому, что строки будут не в порядке.Однако все, что нужно сделать сценарию, это вернуть целое число, например, echo json_encode(['page' => 4]);
После того, как это число рассчитано, вы должны вызвать эквивалентный щелчок для «страницы 4» (или любого другого номера страницыВы хотите) в DataTables.Это можно сделать в jquery, нацелив якоря внутрь .dataTables_paginate
.
Затем вам нужно прокрутить вниз до строки - некоторая информация была предоставлена @ygorbunkov по этому поводу.Отсутствует или неочевидно, что вам нужно дождаться, пока запрос ajax для заполнения DataTable завершит , прежде чем попытаться прокрутить строку - иначе данные не будут доступны для прокрутки.Это можно сделать, вложив .done()
в запросе ajax к конечной точке, которая получает данные для страницы 4.
Хотя это неполный ответ, это требуемые принципы.В итоге мы фактически отказались от этого в нашем приложении, потому что сложность его реализации перевешивала любую выгоду!