Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Search 如何同时搜索剑道网格的所有列?_Search_Kendo Ui_Filtering_Kendo Grid_Kendo Asp.net Mvc - Fatal编程技术网

Search 如何同时搜索剑道网格的所有列?

Search 如何同时搜索剑道网格的所有列?,search,kendo-ui,filtering,kendo-grid,kendo-asp.net-mvc,Search,Kendo Ui,Filtering,Kendo Grid,Kendo Asp.net Mvc,我已经尝试过这个人所做的事情,并且它完美无瑕,谢谢你的帖子: 然而,我现在遇到的问题是,当您试图一次搜索多个列时,只要您将空格分隔到一个新词,它就不再有效 我如何告诉它忽略空格并继续搜索包含的内容 所以,如果你搜索“Verizon LTE”,当我自己搜索,“Verizon”或“LTE”时,它会像它应该搜索的那样工作,但是当它们在一起时,它会返回零结果,而不是同时包含这两个项目 这是我当前的搜索,与上面的链接样式相同 $(document).ready(function () { //ch

我已经尝试过这个人所做的事情,并且它完美无瑕,谢谢你的帖子:

然而,我现在遇到的问题是,当您试图一次搜索多个列时,只要您将空格分隔到一个新词,它就不再有效

我如何告诉它忽略空格并继续搜索包含的内容

所以,如果你搜索“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
            }
        ]
    });


});
});

这是剑道格网过滤的限制吗?

过滤时,默认情况下,剑道会尝试匹配您键入的整个短语。所以,如果你输入“Verizon”,它将匹配任何包含“Verizon”的内容。如果您输入“LTE”,它将匹配任何包含“LTE”的内容。然而,当您输入“Verizon LTE”时,它将匹配任何包含“Verizon LTE”的内容,而您似乎希望它匹配“Verizon”、“LTE”和“Verizon LTE”(当它匹配前两个时,无论如何都会发生这种情况)

为了实现这种类型的筛选,您需要在筛选函数中预处理
val
,以便使用空格作为标记拆分器创建搜索词数组,然后对数组的每个成员执行筛选并返回聚合结果

因此,为了按空格分割搜索词:

var val=$(“#搜索”).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;
}
函数getFieldFilter(字段、运算符、值){
var-ret=[];
对于(变量i=0;i
是的,我刚刚尝试了.Split(“”),它做了一些古怪的搜索,仍然返回了所有的结果。我要尝试一下,看看。这是离题的,但我以前从未见过.push,你能快速解释一下它的作用吗?
Array.prototype.push()
在数组末尾追加一个元素并返回新数组的长度。Mozilla doc:这与我希望的不完全一样,我忘了提到我还希望它继续搜索搜索结果……因此,如果Verizon返回112行,如果我添加另一个字段,我希望对已经过滤的字段进行过滤。是这样吗可能不进行服务器搜索?否则我只会有一个搜索字段,该字段发布服务器搜索并每次返回所有原始数据。但是,这与我最初发布的内容完全相同,谢谢您的回答!可能是
$(“#搜索”).val().trim()。拆分(/[\s]+/)
将是拆分搜索项的更好方法。