【发布时间】:2015-09-08 17:43:41
【问题描述】:
我用 HTML 和 jQuery 编写了一个基本的示例任务列表表。我已将一些on change 事件附加到我的Filter DropDown Selection Fields
演示:http://codepen.io/jasondavis/pen/MwOwMX?editors=101
我为其中的每一个都有一个过滤器选择字段:
- 指定用户
- 任务状态
- 里程碑
- 优先级
- 标签
他们都独立完成从我的任务列表中过滤掉不匹配结果的工作。
对于每个任务行,我将每个可过滤选项的值存储在 Data Attribute 中,例如以下示例 任务行 HTML:
<tr id="task-3"
class="task-list-row"
data-task-id="3"
data-assigned-user="Donald"
data-status="Not Started"
data-milestone="Milestone 1"
data-priority="Low"
data-tags="Tag 3">
<td>Task title 3</td>
<td>11/16/2014</td>
<td>02/29/2015</td>
<td>Low</td>
<td>Milestone 1</td>
<td>Donald</td>
<td>Tag 3</td>
</tr>
因此,任务行的实际文本无关紧要,因为任务行不会显示所有属性。重要的是存储在任务行数据属性中的值。
将Miledstone 设置为Milestone 2 的任务行/记录将具有类似data-milestone="Milestone 2" 的数据属性
一个示例 JavaScript/jQuery 过滤器代码:
// Task Milestone Dropdown Filter
$('#milestone-filter').on('change', function() {
var taskMilestone = this.value;
if(taskMilestone === 'None'){
$('.task-list-row').hide().filter(function() {
return $(this).data('milestone') != taskMilestone;
}).show();
}else{
$('.task-list-row').hide().filter(function() {
return $(this).data('milestone') == taskMilestone;
}).show();
}
});
正如我所提到的。我可以让我的每个“过滤器”自己工作,但是一旦我尝试一次应用超过 1 个过滤器,它将不适用于当前代码。
在修改我的代码以制作一个有效的多过滤器示例方面,我将不胜感激?
我当前的演示在这里:http://codepen.io/jasondavis/pen/MwOwMX?editors=101
更新测试 2
经过一番思考,我想也许我需要将所有当前的过滤器值存储到变量中,然后在每个 change 事件上而不是这样:
return $(this).data('milestone') != taskMilestone;
它需要更像这样......
return $(this).data('milestone') != taskMilestone
&& $(this).data('priority') != taskPriority
&& $(this).data('tags') != taskTags
&& .... for all filters;
这听起来对吗?
没关系,只是没有运气!
【问题讨论】:
标签: javascript jquery filter