Javascript 函数在选择器上工作而不删除以前的值
我正在开发一个过滤函数,在这个函数上有点卡住了 如何在不撤消上一个过滤器的情况下合并过滤器? jQuery用于更好地理解: 我要改变我的做事方式吗?我看到的唯一解决方案是切换,但它会非常长(因为我有两个以上的选择) 我拉过小提琴,但他演奏得不好,我不明白为什么。 无论如何,如果这能帮助你理解。。。给你-->Javascript 函数在选择器上工作而不删除以前的值,javascript,jquery,Javascript,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。。。目的地持续时间
'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();
});
});