我已经尝试过这个人做了什么,并且它完美无缺,谢谢你的帖子:
Search All Columns in KendoUI Grid
但是,我现在遇到的问题是,当您尝试一次搜索多个列时,只要您使用新单词,它就不再有效。
如何告诉它忽略空格并继续搜索包含?
因此,如果您在我自己搜索时搜索“Verizon LTE”,“Verizon”或“LTE”它可以按照它应该进行搜索,但是当它们在一起时,它会返回零结果,而不是包括这两个项目。
这是我目前的搜索,与上面的链接风格相同
$(document).ready(function () {
//change event
$("#search").keyup(function () {
var val = $('#search').val();
$("#grid").data("kendoGrid").dataSource.filter({
logic: "or",
filters: [
{
field: "ServiceProviderName",
operator: "contains",
value: val
},
{
field: "ManufacturerName",
operator: "contains",
value: val
},
{
field: "ModelNumber",
operator: "contains",
value: val
},
{
field: "ModelName",
operator: "contains",
value: val
},
{
field: "Technology",
operator: "contains",
value: val
},
{
field: "OSTypeName",
operator: "contains",
value: val
}
]
});
});
});
这是Kendo网格过滤的限制吗?
答案 0 :(得分:2)
过滤时,默认情况下,KendoUI会尝试匹配您键入的整个短语。因此,如果您输入“Verizon”,它将匹配包含“Verizon”的任何内容。如果您输入“LTE”,它将匹配任何包含“LTE”的内容。但是,当您输入“Verizon LTE”时,它将匹配任何包含“Verizon LTE”的内容,而您似乎希望它与“Verizon”,“LTE”和“Verizon LTE”相匹配(无论如何匹配时都会匹配)在前两个。
为了实现这种类型的过滤,您需要在过滤功能中预处理val
以创建搜索项阵列,使用空格作为令牌分割器,然后执行过滤数组的每个成员并返回聚合结果。
所以,为了用空格分割你的搜索词:
var val = $("#search").val().split(" ");
这将使val成为数组而不是文字值,因此您需要根据此数组中的每个值生成过滤器数组。有很多方法可以做到,但这是一种方法:
filters: getFieldFilter("ServiceProviderName", "contains", val)
.concat(getFieldFilter("ManufacturerName", "contains", val))
.concat(...);
...其中getFieldFilter可能如下所示:
function getFieldFilter(field, operator, values) {
var ret = [];
for(var i = 0; i < values.length; i++) {
ret.push(
{
field: field,
operator: operator,
value: values[i]
});
}
return ret;
}