2 回答

TA貢獻1775條經驗 獲得超8個贊
現在這實際上是您問題的答案:我在查看https://www.daterangepicker.com/和 moment.js 文檔后重建了您的邏輯。
行的過濾可以在 daterangepicker 的回調函數中完成,如下所示。僅當表行的日期介于日期范圍選擇器的所選開始日期和結束日期之間時,才會顯示該行。如果您真的想在選擇后查看所選范圍,您還應該將 daterangepicker 字段設為一個<input type="text">字段。
$('#reportrange').daterangepicker({startOfWeek: 'monday'},function(start,end){
$('#mydataTable tr').each((i,tr)=>{ // go through each tr of table body:
var dt=moment($('td:eq(4)',tr).text(),'MM/DD/YY'); // parse the date in column 5 using moment.js
$(tr).toggle( start<dt && dt<end ); // if dt is between start and end then show, else hide
})
});
<script type="text/javascript" src="https://cdn.jsdelivr.net/jquery/latest/jquery.min.js"></script>
<script type="text/javascript" src="https://cdn.jsdelivr.net/momentjs/latest/moment.min.js"></script>
<script type="text/javascript" src="https://cdn.jsdelivr.net/npm/daterangepicker/daterangepicker.min.js"></script>
<link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/npm/daterangepicker/daterangepicker.css" />
<input type="text" id="reportrange">
<div class="card-body">
<div id="tablas">
<div id="var receive">
<div class="table-striped">
<table class="table table-bordered" width="100%" cellspacing="0">
<thead align="center">
<tr><th>A</th><th>B</th><th>C</th><th>D</th><th>E</th><th>Date</th></tr>
</thead>
<tbody id="mydataTable">
<tr>
<td align="center">1</td>
<td>987654 UserName</td>
<td align="center">Coins</td>
<td align="right">$1,000.00</td>
<td align="center">07/16/19</td>
<td align="center">
<form action="~/Index"> <button type="submit" class="btn btn-info">Select</button></form>
</td>
</tr><tr>
<td align="center">2</td>
<td>123456 UserName</td>
<td align="center">Coins</td>
<td align="right">$1,000.00</td>
<td align="center">10/16/19</td>
<td align="center">
<form action="~/Index"> <button type="submit" class="btn btn-info">Select</button></form>
</td>
</tr><tr>
<td align="center">3</td>
<td>007 somebody else</td>
<td align="center">Coins</td>
<td align="right">$100.00</td>
<td align="center">10/20/19</td>
<td align="center">
<form action="~/Index"> <button type="submit" class="btn btn-info">Select</button></form>
</td>
</tr><tr>
<td align="center">4</td>
<td>789101 UserName</td>
<td align="center">Coins</td>
<td align="right">$3,210.00</td>
<td align="center">11/07/19</td>
<td align="center">
<form action="~/Index"> <button type="submit" class="btn btn-info">Select</button></form>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</div>

TA貢獻1794條經驗 獲得超7個贊
下面的代碼使用 jQuery 并說明了排序,以及基于表行中具有 id order_index 的輸入字段的值和過濾的兩種方法。這三個部分是分開的,并且不相互依賴地工作。您需要稍微調整一下以適合您的情況。
在您的情況下,重要的是將日期放入 javascript Date 類中。不幸的是,javascript 中內置的解析并不可靠,因為它被認為是依賴于實現的,因此您必須使其適合您的特定情況。我建議在 google 中檢查“javascript string to date”搜索掩碼。這應該讓你開始。一旦您以正確的格式( Date )獲取日期,您就可以像任何其他變量一樣比較它。
var l_rows = [];
f_table.find('tr').each(function(){
var l_currRow = $(this);
l_rows.push(l_currRow);
})
//filtering 1, the result from the filtering is irrelevant
//for scope of the question, but in the general case
//it is what you are after
//in here since you want to manage a table
//you can go without the filtering of the array
var l_filteredRows = l_rows.filter(function(f_row){
var l_key = f_row.find('#order_index').val();
var l_bResult = (/* condition here*/);
if(l_bResult){
f_row.show();
}else{
f_row.hide();
}
return l_bResult;
});
//filtering 2. no filter to the array, just iteration
f_table.find('tr').each(function(){
var l_key = $(this).find('#order_index ').val();
var l_bResult = (/*condition here*/);
if(l_bResult){
f_row.show();
}else{
f_row.hide();
}
return l_bResult;
});
//sorting
l_rows.sort(function (a, b) {
var keyA = parseInt($('td', a).find('#order_index').val());
var keyB = parseInt($('td', b).find('#order_index').val());
if(keyA > keyB) return 1;
if(keyA < keyB) return -1;
return 0;
});
f_table.html('');
for(var i=0;i<l_rows.length;i++){
f_table.append(l_rows[i]);
}
添加回答
舉報