Я использую jQuery Datatables (последняя версия 1.10.19) jQuery ver. 3.3.1 Не получение ожидаемых результатов при поиске в таблице:
если функция используется для возврата сгенерированного значения для столбца поиск не дает желаемых результатов.
var rowno =1;
var dataSet = [
["Airi Satou", "Accountant", "Tokyo"],
["Angelica Ramos", "Chief Executive Officer (CEO)", "London"],
["Gavin Joyce", "Developer", "Edinburgh"],
["Jennifer Chang", "Regional Director", "Singapore"],
["Brenden Wagner", "Software Engineer", "San Francisco"],
["Fiona Green", "Chief Operating Officer (COO)", "San Francisco"],
["Shou Itou", "Regional Marketing", "Tokyo"],
["Martena Mccray", "Post-Sales support", "Edinburgh"],
["Unity Butler", "Marketing Designer", "San Francisco"]
];
$(document).ready(function() {
$('#example').DataTable( {
data: dataSet,
"columns": [
// ** DataTable search / filter FAIL: on column function generated value ***
// { "data": function ( row, type, val, meta ) {return rowno++ ;}, "title" : "Row No."},
{ "data": function ( row, type, val, meta ) {return "row"+ rowno++ ;}, "title" : "Row No."},
{ "data": 0,"title": "Name"},
{ "data": 1,"title": "Position"},
{ "data": 2,"title": "Office"}
]
} );
} );
ПОСМОТРЕТЬ: jsfiddle: https://jsfiddle.net/scriptgurus/q4cvr9a8/
Поиск по "row1.." или row2.. row3.. Мы должны получить строку с "row1" и т.д..

Вам нужно использовать что-то конкретное, потому что вы всегда добавляете + 1 к rowno. Обычно вы можете сделать это таким образом. Но в вашем случае, если вы это сделаете console.info(rowno++), вы увидите, что он добавляет его много раз, чем вы ожидаете, потому что цикл выполняется в 5 раз, насколько я вижу, поэтому он добавляет всего 45 раз.
Элементы массива (9 * 5) = 45, поэтому у вас есть meta Я видел, что он возвращает meta.row с индексом строки, поэтому вы можете сделать return "row" + (meta.row + 1) это делает + 1 к номеру индекса.
В качестве альтернативы вы можете использовать параметр функции с аргументом мета.строка, чтобы получить правильный номер строки во время инициализации таблиц данных.
This meta works since version 1.10.1
Ссылка: столбцы.данные , столбцы.рендер
{
"title" : "Row No.",
"data": function ( row, type, val, meta ) {
return "row"+ (meta.row+1);
}
},
См. Пример ниже:
var dataSet = [
["Airi Satou", "Accountant", "Tokyo"],
["Angelica Ramos", "Chief Executive Officer (CEO)", "London"],
["Gavin Joyce", "Developer", "Edinburgh"],
["Jennifer Chang", "Regional Director", "Singapore"],
["Brenden Wagner", "Software Engineer", "San Francisco"],
["Fiona Green", "Chief Operating Officer (COO)", "San Francisco"],
["Shou Itou", "Regional Marketing", "Tokyo"],
["Martena Mccray", "Post-Sales support", "Edinburgh"],
["Unity Butler", "Marketing Designer", "San Francisco"]
];
$(document).ready(function() {
$('#example').DataTable( {
data: dataSet,
"columns": [
{ "title" : "Row No.",
"data": function ( row, type, val, meta ) {
return "row"+ (meta.row+1);
}
},
{ "data": 0,"title": "Name"},
{ "data": 1,"title": "Position"},
{ "data": 2,"title": "Office"}
]
} );
} );<script src = "https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src = "https://cdn.datatables.net/1.10.19/js/jquery.dataTables.min.js"></script>
<link href = "https://cdn.datatables.net/1.10.19/css/jquery.dataTables.min.css" rel = "stylesheet" />
<table id = "example" class = "display" width = "100%"></table>Спасибо! никогда раньше не смотрел на метапараметр - обновил jsfiddle с вашим исправлением
кстати: также, если использовать columns.render (datatables.net/reference/option/columns.render) - тот же сбой - без радости - я использовал этот плагин во многих проектах на протяжении многих лет.. это может быть ошибка версии - поскольку я, кажется, не припоминаю, чтобы эта проблема возникала в более старых версии. Будет расследовать это сейчас.