Я думаю, вам нужно использовать word boundary, \b
:
Соответствует границе слова. Граница слов соответствует позиции, в которой символ слова не соблюдается или не предшествует другому символу слова.
Так что, когда у вас есть поиск по ключевому слову «предел» и строки «мое слово не имеет предела», «это неограниченная» только первая строка матча. Так
$('#search-inp').keyup(function(){
var term = $(this).val(),
regex = '\\b' + term + '\\b';
table.columns(1).search(regex, true, false).draw();
})
Выделите
Определить некоторые статические «изюминка метки», чтобы ввести и удалить для того, чтобы выделить поиска матчей:
var hlBegin = '<strong class="highlight">',
hlEnd = '</strong>';
Добавление тегов выделения на содержание столбца:
function highlight(term) {
var row, str,
rowCount = table.rows().nodes().length,
regexp = new RegExp('('+term+')', 'ig');
for (row=0; row<rowCount; row++) {
str = table.cell(row, 1).data();
str = str.replace(regexp, function($1, match) {
return hlBegin + match + hlEnd;
})
table.cell(row, 1).data(str).draw();
}
}
Удаление ярлыков:
function removeHighlight() {
var row, str,
rowCount = table.rows().nodes().length;
for (row=0; row<rowCount; row++) {
str = table.cell(row, 1).data();
str = str.replace(/(<([^>]+)>)/ig, '');
table.cell(row, 1).data(str).draw();
}
}
Установка все это вместе:
$('#search-inp').keyup(function(){
var term = $(this).val(),
regex = '\\b' + term + '\\b';
removeHighlight();
table.columns(1).search(regex, true, false);
highlight(term);
})
раздвоенной скрипка ->http://jsfiddle.net/Lnvbnp6c/
Update. У меня сложилось впечатление (через комментарии), что все слова должны быть сопоставлены.Если речь идет о соответствии целого слова в начале колонки:
regex = '^' + term + '\\b';
http://jsfiddle.net/Lnvbnp6c/1/
Если речь идет просто о соответствие символов столбца начинается с, не nessecarily целым слова:
regex = '^' + term;
http://jsfiddle.net/Lnvbnp6c/2/
Последний, вероятно, тот, который больше всего понравится пользователям, когда они печатают в поле поиска.
В качестве альтернативного подхода можно попытаться использовать пользовательский фильтр:
$('#search-inp').keyup(function() {
var str,
term = $(this).val(),
regexp = new RegExp('\\b' + term + '\\b', 'ig');
removeHighlight();
$.fn.dataTable.ext.search.push(
function(settings, data, dataIndex) {
str = data[1];
return regexp.test(str) ? true : false;
}
);
table.draw();
highlight(term);
$.fn.dataTable.ext.search.pop();
})
демо с подсветкой, как описано выше ->http://jsfiddle.net/x96hzok4/
У меня сложилось впечатление, что это немного Быстрее. Конечно, если у вас много строк и вы хотите выполнять поиск по нескольким столбцам, я думаю, вы должны рассмотреть собственный фильтр и подумать о том, чтобы не требовать длительных полных регулярных выражений для всех строк.
Может описать _ «это не работает» _? Появиться, чтобы вернуться в матче на http://jsfiddle.net/yg32o2yh/5/? – guest271314
Когда я набираю «xon», тогда он выбирает первую строку. но в нем нет слова, смотрящего из «xon» – Carlos
Ожидается результат, что запрос 'xon'_not_ соответствует' Tiger Nixon'? – guest271314