Jquery表过滤器修改

时间:2015-03-08 19:05:21

标签: javascript jquery

我一直在使用下面的Jquery Table过滤器代码,它完全按照我的需要工作。现在我需要添加两个我不知道该怎么做的选项。过滤器仅在名为" Materials Ordered"的表列中进行过滤。如果它在id =""中找到了确切的文本,那就是显示的表行。

我需要添加的是以下内容,仍然只是查看同一列:

1)添加名为“Open”的新过滤器选项,该选项应该: - 显示除所有4种产品(Backsplash,Carpet,Tile&Wood)之后的N / A或订单日期的记录以外的所有记录

2)添加名为“已关闭”的新过滤器选项,该选项应显示: - 仅显示所有4种产品(Backsplash,Carpet,Tile& Wood)之后有N / A或订单日期的记录

<input type="radio" id="" name="Materials Ordered" /> All
<input type="radio" id="Tile NOT" name="Materials Ordered" checked="checked">Tile
<input type="radio" id="Carpet NOT" name="Materials Ordered" /> Carpet
<input type="radio" id="Wood NOT" name="Materials Ordered" /> Wood
<input type="radio" id="Backsplash NOT" name="Materials Ordered" /> Backsplash

以下是当前过滤的小提琴:https://jsfiddle.net/aL6141dq/

<script>
$(document).ready(function () {

$('input[type="radio"]').change(function () {
var name = $('input[name="name"]:checked').prop('id') || '';
var position = $('input[name="Materials Ordered"]:checked').prop('id') || '';
$('tbody tr').hide();
$('tbody tr:contains(' + name + ')').show();
$('tbody tr').not(':contains(' + position + ')').hide();
});

});
</script>

这是第二个选项的主旨:

(if Backspash tabletext = "Backspash mm/dd/yyyy" OR "Backspash N/A"
AND
if Carpet tabletext = "Carpet mm/dd/yyyy" OR "Carpet N/A"
AND
if Tile tabletext = "Tile mm/dd/yyyy" OR "Tile N/A"
AND
if Wood tabletext = "Wood mm/dd/yyyy" OR "Wood N/A")
{
SHOW Table Row)
}

2 个答案:

答案 0 :(得分:0)

好吧,我没有对此进行过测试,但似乎您可以执行以下操作:

$('tbody tr').filter(function() {
  var matches = $(this).find('td').filter(function() {
    var val = $(this).text(),
        prefix = this.id.substring(0, this.id.length - 4) + ' ',
        datePattern = /^(\d{1,2})(\/|-)(\d{1,2})(\/|-)(\d{4})$/,
        suffix;

    if (val.substring(0, prefix.length) === prefix) {
        suffix = val.substring(prefix.length);
        if (suffix === 'N/A' || suffix.match(datePattern)) {
            return true;
        }
    }
    return false;
  }).length;

  return option === 'Closed' ? matches === 4 : matches !== 4;
}).show();

我们的想法是查看每行中的表格单元格,过滤那些符合条件的单元格,然后计算结果。该代码通过从ID中删除尾随的“NOT”来提取有效值的开始(例如“Tile”)。然后测试剩下的字符,看它们是“N / A”还是日期(显然可能有更广泛的日期检查)。

然后可以检查一行中匹配单元格的数量,以查看哪些条件为真,并相应地show()

答案 1 :(得分:0)

我现在有了答案。

<input checked="checked" id="" name="Materials Ordered" type="radio"> All
<input id="openOrders" name="Materials Ordered" type="radio"> Open
<input id="closedOrders" name="Materials Ordered" type="radio"> Closed
<input id="Tile NOT" name="Materials Ordered" type="radio"> Tile
<input id="Carpet NOT" name="Materials Ordered" type="radio"> Carpet
<input id="Wood NOT" name="Materials Ordered" type="radio"> Wood
<input id="Backsplash NOT" name="Materials Ordered" type="radio"> Backsplash

<script>
$(document).ready(function() {
$('input[type="radio"]').change(function() {
    $('tbody tr').show();
    var position = $('input[name="Materials Ordered"]:checked').prop('id') || '';
    if (position === 'openOrders') {
        $('tbody tr').not(':contains("NOT")').hide();
    } else if (position === 'closedOrders') {
        $('tbody tr:contains("NOT")').hide();
    } else {
        $('tbody tr').not(':contains(' + position + ')').hide();
    }
});
});
</script>