Javascript 函数在选择器上工作而不删除以前的值

Javascript 函数在选择器上工作而不删除以前的值,javascript,jquery,Javascript,Jquery,我正在开发一个过滤函数,在这个函数上有点卡住了 如何在不撤消上一个过滤器的情况下合并过滤器? jQuery用于更好地理解: 我要改变我的做事方式吗?我看到的唯一解决方案是切换,但它会非常长(因为我有两个以上的选择) 我拉过小提琴,但他演奏得不好,我不明白为什么。 无论如何,如果这能帮助你理解。。。给你--> 如果有人对我有指示的话,我很乐意去看 我会稍微更改您的代码并使用以下命令。基本上,我所做的是为每个选择选项设置一个数据属性,然后将连接的数据属性(将内容与所选选项匹配)设置为表中表行上的新

我正在开发一个过滤函数,在这个函数上有点卡住了

如何在不撤消上一个过滤器的情况下合并过滤器?

jQuery用于更好地理解: 我要改变我的做事方式吗?我看到的唯一解决方案是切换,但它会非常长(因为我有两个以上的选择)

我拉过小提琴,但他演奏得不好,我不明白为什么。 无论如何,如果这能帮助你理解。。。给你-->


如果有人对我有指示的话,我很乐意去看

我会稍微更改您的代码并使用以下命令。基本上,我所做的是为每个选择选项设置一个数据属性,然后将连接的数据属性(将内容与所选选项匹配)设置为表中表行上的新数据属性

例如:

  • A得0分,B得1分,C得2分。。。目的地城市
  • 到2015年1月1日得0分,到2015年1月2日得1分,到2015年1月3日得2分。。。目的地日期
  • 0分对1,1分对2,2分对3。。。目的地持续时间
当(假设)选择以下各项时:A,01/01/2015,5,值将为0,0,4。然后,我们将这些值连接成一个新的数据值,并与表中的值进行比较:
'0,0,4'
与每个表行的数据属性进行比较

这变得“棘手”的地方是,由于没有为该选择选择任何内容,因此可能存在多个值。假设他们将目的地日期留空,并将目的地城市设置为A,目的地持续时间设置为5

下面的代码使用正则表达式将字符串与输出正则表达式进行比较(根据用户选择的值创建,如果未进行选择,则默认为
[0-9]+
,表示以下数字[0-9](从0到9)中的+(一个或多个)

在未选择目标日期的情况下,输出正则表达式将是
/0、[0-9]+,4/

现在,您需要做的就是使用存储在SQL数据库中的主键(我假设您正在使用主键填充字段),并将其用作
数据id
值。
HTML


JSFIDLE:

您能提供一些HTML代码,以便我们更好地理解您的问题以及ID和类的确切含义吗?是的,好吧,我可以给您举个例子。我会做一个小动作。为什么您不为每个选择元素处理
change
事件,并分析所有选择,并在此基础上隐藏/显示?这将使您获得您正在寻找的“多谓词”行为。因为我将不得不隐藏一些应该显示的行为。我将删除以前的数据(我想……;我已经尝试过,但没有)fructif@ctwheels我已经做了一个(并编辑了我的问题)但是他没有像你们看到的那个样工作……我希望他能帮助你们理解我的问题。这真的很有趣,也很难!我想我会的。谢谢你们花时间给我看这个!不客气,这对我来说也是新的!我不知道如何用简单的代码来做这件事,这让我很烦恼,所以我用了Regex代替了haha。或者,您可以在每次选择更改后使用AJAX重新填充表。然后使用php输出表并刷新其容器。这将是php/AJAX的方式,但我认为jQuery方式也可以很好地工作,只是一个注释,说明您在函数方面对我的帮助有多大:)最后的结果很漂亮!我会在预生产准备好午餐后立即链接它。再次感谢你将为此获得更多的投票权!非常欢迎!我可能会在某个时候使用它。我认为你的问题很有趣。你的问题也应该有更多的投票权
$('#departureCitys').change( function() {
    $('.products_dispo').each(function () {
            $(this).show();
            if($(this).find('.cityName').text() != $('#departureCitys').find(":selected").text()){
                 $(this).toggle();
                 }
    });
});

$('#departureDates').change( function() {
    $('.products_dispo').each(function () {
            $(this).show();
            if($(this).find('.departureDate').text() != $('#departureDates').find(":selected").text()){
                 $(this).toggle();
                 }
    });
});
<table id='trips'>
    <thead>
        <th>
            <select class='departureCity'>
                <option></option>
                <option data-id='0'>A</option>
                <option data-id='1'>B</option>
                <option data-id='2'>C</option>
                <option data-id='3'>D</option>
                <option data-id='4'>E</option>
            </select>
        </th>
        <th>
            <select class='departureDate'>
                <option></option>
                <option data-id='0'>01/01/2015</option>
                <option data-id='1'>02/01/2015</option>
                <option data-id='2'>03/01/2015</option>
                <option data-id='3'>04/01/2015</option>
                <option data-id='4'>05/01/2015</option>
            </select>
        </th>
        <th>
            <select class='departureDuration'>
                <option></option>
                <option data-id='0'>1</option>
                <option data-id='1'>2</option>
                <option data-id='2'>3</option>
                <option data-id='3'>4</option>
                <option data-id='4'>5</option>
            </select>
        </th>
    </thead>
    <tbody>
        <tr data-all='0,0,0'>
            <td class='city'>A</td>
            <td class='date'>01/01/2015</td>
            <td class='duration'>1</td>
        </tr>
        <tr data-all='1,0,0'>
            <td class='city'>B</td>
            <td class='date'>01/01/2015</td>
            <td class='duration'>1</td>
        </tr>
        <tr data-all='0,1,0'>
            <td class='city'>A</td>
            <td class='date'>02/01/2015</td>
            <td class='duration'>1</td>
        </tr>
        <tr data-all='0,0,4'>
            <td class='city'>A</td>
            <td class='date'>01/01/2015</td>
            <td class='duration'>5</td>
        </tr>
    </tbody>
</table>
var $city = $('.departureCity');
var $date = $('.departureDate');
var $dur = $('.departureDuration');

$('#trips select').on('change', function() {
    var array = [];
    array.city = $city.find('option:selected').data('id');
    array.date = $date.find('option:selected').data('id');
    array.dur = $dur.find('option:selected').data('id');
    console.log(array);
    if(typeof array.city === 'undefined') array.city = '[0-9]+';
    if(typeof array.date === 'undefined') array.date = '[0-9]+';
    if(typeof array.dur === 'undefined') array.dur = '[0-9]+';
    var regex = array.city+','+array.date+','+array.dur;
    $('#trips tbody tr').show();
    $('#trips tbody tr').each(function() {
        var $this = $(this);
        var data = $this.data('all');
        if(data.match(regex)) $this.show();
        else $this.hide();
    });

});