我有一个过滤器,用于隐藏未通过测试的表格元素(时间少于x小时)。第一次一切正常。我选择了时间。隐藏未通过测试的元素。我重新加载以显示所有内容。我试着再次过滤。这次隐藏所有其他行时,在我的表头和内容之间插入一个空行。每次重新运行过滤器时,都会插入另一行。
这是代码:
HTML:
<div id="timeSelect">
<select id="FilterTimeList" name="FilterTimeList"><option value="">-- select Time --
</option>
</select>
</div>
<a id="filterLink" href="#" onclick="timeFilter(this);">Filter</a>
<table width="100%">
<tr>
<td>Log Id</td>
<td>Message</td>
<td>SourceStackTrace</td>
<td>awData</td>
<td>LogDate</td>
</tr>
<tr class="list">
<td class="myTitle">1</td>
<td>this is my message</td>
<td></td><td></td>
<td class="exceptionDate">5/4/2011 5:41:00 PM</td>
<td></td>
</tr>
<tr class="list">
<td class="myTitle">2</td>
<td>this is my message 2</td>
<td></td><td></td>
<td class="exceptionDate">4/27/2011 5:41:24 PM</td>
<td>
</td>
</tr>
<tr class="list">
<td class="myTitle">12</td>
<td>this is my message 12</td>
<td></td><td></td>
<td class="exceptionDate">5/16/2011 12:06:38 PM</td>
<td></td>
</tr>
</table>
使用Javascript:
<script src="http://code.jquery.com/jquery-1.5.1.min.js" type="text/javascript"/>
<script type="text/javascript">
var myOptions =
{
0: 'Show All',
1: 'Last 12 hours',
2: 'Last 24 hours'
};
$.each(myOptions, function (val, text) {
$('<option />').val(val).text(text).appendTo('#timeSelect select');
});
function timeFilter(a) {
$('.test').hide();
var chosenTime = $('#timeSelect select').val();
var timeCompare;
switch (chosenTime) {
case '1':
timeCompare = 12;
break;
case '2':
timeCompare = 24;
break;
}
var now = new Date();
var nowHours = now.setHours(now.getHours() - timeCompare);
var newDate = new Date(nowHours);
if (chosenTime > 0) {
var myDateClass = $('.exceptionDate')
var i = 0
$(myDateClass).each(function () {
var myDateClassVal = $(this).text();
var myDate = new Date(myDateClassVal);
if (myDate < newDate) {
$('tr:eq(' + i + ')').slideUp();
}
i++;
});
}
else {
$('.exceptionDate').parent().slideDown();
}
}
</script>
答案 0 :(得分:2)
我认为你可能在javascript中遗漏了一些代码,因为你有额外的'});'在您的选项代码之后。
不确定你的额外线路来自哪里。我在jsFiddle 1.5.2中使用它,所以它可能是一个在jQuery中得到纠正的错误......