在jquery数据表中,我必须使用完全匹配过滤结果并突出显示它。为了完全匹配我正在尝试下面的代码,但它不起作用。 fiddle
table.aoPreSearchCols[ iCol ].sSearch = "^\\s*"+'1'+"\\s*$";
table.aoPreSearchCols[ iCol ].bRegex = false;
table.aoPreSearchCols[ iCol ].bSmart= false;
答案 0 :(得分:9)
我认为您需要使用word boundary,\b
:
匹配单词边界。单词边界匹配a的位置 单词字符未被跟随或前面的另一个单词字符。
因此,当您有搜索字词“ limit ”且字符串“我的字没有限制”时,“它是无限的”第一个字符串是匹配。所以
$('#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);
})
分叉小提琴 - &gt;的 http://jsfiddle.net/Lnvbnp6c/ 强>
<强>更新
即可。我得到的印象(通过评论)应该匹配任何地方的整个单词。如果它是关于匹配列开头的整个单词: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();
})
演示,上面有高亮显示 - &gt;的 http://jsfiddle.net/x96hzok4/ 强>
我的印象是这有点快。当然,如果你有很多行,并且想要搜索多个列,我认为你应该考虑自定义过滤器,并考虑不要在所有字符串上制作耗时的完整正则表达式。
答案 1 :(得分:1)
尝试
$('#search-inp').keyup(function(){
var key = $(this).val();
var regExp = "."
if (key)
regExp = "^\\s*" + key + "\\s*$";
table.columns(1).search(regExp, true).draw();
});
当搜索key
为空时,请始终将其设置为.
中的any
匹配regex
。
答案 2 :(得分:0)
尝试
$('#search-inp').keyup(function(){
var elem = $(this)
table.columns(1)
.search("^\\s*"+elem.val()+"\\s*$", true)
.draw()
});
jsfiddle http://jsfiddle.net/yg32o2yh/6/