我正在使用数据表1.9.4和列过滤插件。它就像一个魅力,除了当我使用'选择'用于列过滤的标记,过滤器不用于完全匹配。它使用通配符搜索,我不想要。我认为使用选择元素而不是文本输入可以解决问题,但它没有。
当我搜索' Semester - I' 时,它应该仅显示' Semester - I'结果。但它显示' Semester - II' 和' Semester - III' 匹配,因为过滤器未查找完全匹配。
我尝试jQuery DataTable ColumnFilter plugin. Can the "select" filter style support exact match?那个,http://code.google.com/p/jquery-datatables-column-filter/issues/detail?id=11那个。但没有人解决我的问题。
JS CODE
$('#semester').dataTable({
"sPaginationType": "full_numbers"
})
.columnFilter({
aoColumns: [ { type: "text"},
{ type: "text" },
{ type: "select", values: [ 'Year - I', 'Year - II', 'Year - III', 'Semester - I', 'Semester - II', 'Semester - III', 'Semester - IV', 'Semester - V', 'Semester - VI', 'Semester - VII ( Integrated )', 'Semester - VIII ( Integrated )', 'Semester - IX ( Integrated )', 'Semester - X ( Integrated )']},
{ type: "text" },
null
]
});
还有其他选择吗?提前致谢
更新
我也尝试了以下内容,但这也没有帮助:
if (bRegex)
oTable.fnFilter($(this).val(), iColumn, bRegex);
else
oTable.fnFilter(unescape("^"+$(this).val()+"$"), iColumn, true);
答案 0 :(得分:4)
瞧!通过一系列试错尝试自己想出来。对于那些遇到类似问题的人来说,解决方案是:
在插件文件的select.change(function () {})
内,更改此内容:
if (bRegex)
oTable.fnFilter($(this).val(), iColumn, bRegex);
else
oTable.fnFilter(unescape($(this).val()), iColumn);
到
if (bRegex)
oTable.fnFilter($(this).val(), iColumn, bRegex);
else
oTable.fnFilter(unescape("^"+$(this).val()+"$"), iColumn, true, false);
答案 1 :(得分:1)
var asInitVals = new Array();
$(document).ready(function() {
var oTable = $('#example').dataTable( {
"oLanguage": {
"sSearch": "Search all columns:"
}
} );
$("tfoot input").keyup( function () {
/* Filter on the column (the index) of this element */
oTable.fnFilter( this.value, $("tfoot input").index(this) );
} );
/*
* Support functions to provide a little bit of 'user friendlyness' to the textboxes in
* the footer
*/
$("tfoot input").each( function (i) {
asInitVals[i] = this.value;
} );
$("tfoot input").focus( function () {
if ( this.className == "search_init" )
{
this.className = "";
this.value = "";
}
} );
$("tfoot input").blur( function (i) {
if ( this.value == "" )
{
this.className = "search_init";
this.value = asInitVals[$("tfoot input").index(this)];
}
} );
} );
注意,在上面的代码中,提供了支持功能,以确保最终用户知道正在过滤哪些数据。 fnFilter()是主要导入的功能。
// after creating the table and getting the table object...
var oTable = $('#some_id').dataTable();
// ...you can use it to get a settings object...
var oSettings = oTable.fnSettings();
// ...then you can do things with the settings object
oSettings.aoPreSearchCols[ iCol ].sSearch = "^\\s*"+'1'+"\\s*$";
oSettings.aoPreSearchCols[ iCol ].bRegex = false;
oSettings.aoPreSearchCols[ iCol ].bSmart= false;
答案 2 :(得分:0)
我使用了接受的答案,但是如果我更改下拉列表,则将其更改回默认值我将得不到任何结果。我的猜测是它试图在“”上进行精确的文本搜索并且什么也没找到。我做了这个修改,似乎对我有用。
if ($(this).val() == "")
oTable.fnFilter(unescape($(this).val()), iColumn, false, false, false, false);
else {
if (bRegex)
oTable.fnFilter($(this).val(), iColumn, bRegex, false, false, false);
else
oTable.fnFilter(unescape("^" + $(this).val() + "$"), iColumn, true, false, false, false);
}