2015-03-08 77 views
1

我一直在使用下面的Jquery表格过滤器代码,它的工作原理与我需要的完全一样。现在我需要添加两个我不知道该怎么做的选项。该过滤器仅在名为“材料已排序”的表格列中过滤。如果它在id =“”中找到确切的文本,那就是显示的表格行。Jquery表格过滤器修改

我需要添加什么变化如下,仍然只能期待在同一列:

1)添加一个名为“打开”新的过滤选项,它应该: - 显示除记录的所有记录,所有4产品(的backsplash,地毯,瓷砖&木)要么N/A或订单日期后

2)添加一个名为“关闭”的新过滤器选项,它应该显示: - 只显示记录的所有4个产品(的backsplash,地毯,瓷砖&木材)有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> 

这是第二个选项的JIST:

(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) 
} 

回答

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(); 

Th一个想法是查看每行中的表格单元格,过滤符合条件的表格单元格,然后对结果进行计数。该代码通过从ID中剥离尾部的'NOT'来提取有效值的开始(例如'Tile')。然后测试剩余的字符,看它们是否为'不适用'或日期(显然可能有更广泛的日期检查)。

然后可以检查一行中的匹配单元的数量,以查看哪些条件为真,并相应地对其进行处理。

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>