如何使jQuery Quicksearch以任何顺序接受搜索词?

时间:2019-01-30 07:40:48

标签: jquery regex jquery-ui quick-search

在我的Drupal 7网站上,有一个使用Views构建的产品概述页面。在该页面上,我有许多复选框可以按任何顺序单击。对于每个单击的复选框,将一个相应的标签复制到输入文本字段中。然后,此文本字段用作jQuery Quicksearch插件的搜索字段。 (我从here借用了这个想法,但是我使用了deuxhuithuit的新插件版本。)

由于可以以任何顺序单击这些复选框,因此将以任何顺序添加搜索字段中的标签。

然后我有大量包含产品的div,其中每个产品都有一个标签文本字段,根据产品的特性,可以在其中输入多个标签术语,仅用空格隔开。

是否有任何方法可以通过prepareQuery和/或testQuery选项使Quicksearch插件以任何顺序接受这些条款?如果是这样,怎么做?我花了很多时间试图找到如何做到这一点的例子。

如果这是不可能的,我想唯一的选择就是构建一个函数,该函数将在搜索字段中以固定的顺序对标签进行排序,然后始终以正确的顺序为每种产品输入标签术语。 ..

无论如何,现在的设置是这样的:

$('#searchfield').quicksearch('.views-column .views-field-field-soktaggar', {
        'delay': 100,
        'selector': 'div.searchtags',
        'loader': 'span.loading',
        'noResults': '#noresults',
        'bind': 'keyup',
        'show': function () {
                $(this).parent('.views-column').removeClass('hide');
            $(this).parent('.views-column').addClass('show');
        },
        'hide': function () {
            $(this).parent('.views-column').removeClass('show');
                    $(this).parent('.views-column').addClass('hide');

        },
        'prepareQuery': function (val) {
            return new RegExp(val, "i");
        },
        'testQuery': function (query, txt, _row) {
                console.log('query: ' + query + ' txt: ' + txt + ' _row: ' + _row);
            return query.test(txt);
        }
    });

1 个答案:

答案 0 :(得分:0)

最后,我自己想出了一个解决方案。诀窍是按照与每种产品的标签说明相同的顺序对查询进行排序。为此,我使用了带有引用数组的排序功能(标签也必须以此顺序在每个产品的标签字段中输入)。

下一个问题是,仅当匹配标签彼此相邻时才找到匹配项。例如,如果产品的标签字符串为1 second,而查询为import subprocess cmd = "mpstat 1 2 | grep Average | awk '{print $NF}'" p = subprocess.Popen(cmd, stdout=subprocess.PIPE, shell=True) out, err = p.communicate() idle = float(out.strip()) print(100-idle) ,则不可能匹配。因此,在这种情况下,必须从标签字符串中删除标签infrared logger ntc

现在这是完整的工作功能:

infrared ntc