Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/75.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
Javascript 使用jQuery过滤列表,当输入多个单词作为输入时,使用和条件_Javascript_Jquery_Filtering - Fatal编程技术网

Javascript 使用jQuery过滤列表,当输入多个单词作为输入时,使用和条件

Javascript 使用jQuery过滤列表,当输入多个单词作为输入时,使用和条件,javascript,jquery,filtering,Javascript,Jquery,Filtering,我正在尝试使用jQuery根据用户输入筛选列表。到目前为止,它还可以正常工作,但是如果用户输入了多个单词,我希望能够使用与AND条件等效的方法对列表进行充分过滤 例如,如果用户输入“丰田手册”,则仍应显示以下两个元素: 丰田Echo 2001手册 丰田花冠2006手册 目前,对于当前的JSFIDLE,过滤器会查找准确的字符串(“Toyota手册”),因此找不到。如何修改代码以使其按预期工作 HTML/JS <label for="filterCars">Filtrer la

我正在尝试使用jQuery根据用户输入筛选列表。到目前为止,它还可以正常工作,但是如果用户输入了多个单词,我希望能够使用与AND条件等效的方法对列表进行充分过滤

例如,如果用户输入“丰田手册”,则仍应显示以下两个元素:

  • 丰田Echo 2001手册
  • 丰田花冠2006手册
  • 目前,对于当前的JSFIDLE,过滤器会查找准确的字符串(“Toyota手册”),因此找不到。如何修改代码以使其按预期工作

    HTML/JS

        <label for="filterCars">Filtrer la liste des indicateurs :</label>
    <input id="filterCars" class="txtfilterCars" type="text" name="txtRecherche">
    <ul class="filterCars">
        <li class="elemCar">Ford escort 2001 manual</li>
        <li class="elemCar">Ford escort 2002 automatic</li>
        <li class="elemCar">Dodge Caravan 2001 automatic</li>
        <li class="elemCar">Hyundai Excel 2003 manual</li>
        <li class="elemCar">Toyota Echo 2001 manual</li>
        <li class="elemCar">Toyota Corolla 2006 manual</li>
        <li class="elemCar">Hyundai Accent 2009 Automatic</li>
    </ul>
    
    $(document).ready(function () {
    
        function noaccent(myString) {
            temp = myString.replace(/[àâä]/g, "a");
            temp = temp.replace(/[éèêë]/g, "e");
            temp = temp.replace(/[îï]/g, "i");
            temp = temp.replace(/[ôö]/g, "o");
            temp = temp.replace(/[ùûü]/g, "u");
            temp = myString.replace(/[ÀÂÄ]/g, "A");
            temp = temp.replace(/[ÉÈÊË]/g, "E");
            temp = temp.replace(/[ÎÏ]/g, "I");
            temp = temp.replace(/[ÔÖ]/g, "O");
            temp = temp.replace(/[ÙÛÜ]/g, "U");
    
            return temp;
        }
    
        $("#filterCars").keyup(
    
        function () {
            var filter = noaccent($(this).val()),
                count = 0;
            $(".filterCars li.elemCar").each(
    
            function () {
                if (noaccent($(this).text()).search(new RegExp(filter, "i")) < 0) {
                    $(this).addClass("cacheElementFiltre");
                } else if (!($(this).hasClass("cacheElement"))) {
                    $(this).removeClass("cacheElementFiltre");
                    count++;
                }
            });
        });
    
    });
    
    //CSS
        .cacheElement, .cacheElementFiltre {
            display: none;
        }
    

    在这种情况下,您需要使用更高级的正则表达式:

    $("#filterCars").keyup(function () {
    
        var text = $.trim(noaccent($(this).val())),
            filter = '^(?=.*\\b' + text.split(/\s+/).join('\\b)(?=.*\\b') + ').*$',
            reg = RegExp(filter, 'i'),
            count = 0;
    
        $(".filterCars li.elemCar").each(function () {
    
            if (!reg.test(noaccent($(this).text()))) {
                $(this).addClass("cacheElementFiltre");
            } else if (!($(this).hasClass("cacheElement"))) {
                $(this).removeClass("cacheElementFiltre");
                count++;
            }
        });
    });
    
    Regexp看起来很复杂,但它允许按任意顺序按单词过滤:“Ford2001”或“2001Ford”

    演示: