我正在使用sorttable.js
进行表格排序,我的表格每3秒更新一次ajax响应,但响应的排序方式并不像我预期的那样。
索引页
<div id="resDiv">
<table id="myTable1" class="sortable">
<thead>
<tr><th id="person">Person</th><th id="monpay">Monthly pay</th></tr>
</thead>
<tbody>
<tr><td>Jan Molby</td><td>£12,000</td></tr>
<tr><td>Steve Nicol</td><td>£8,500</td></tr>
<tr><td>Steve McMahon</td><td>£9,200</td></tr>
<tr><td>John Barnes</td><td>£15,300</td></tr>
</tbody>
<tfoot>
<tr><td>TOTAL</td><td>£45,000</td></tr>
</tfoot>
</table>
</div>
<a href="#" id="ajax-append">Append new table data</a>
ajax响应是:
<table id="myTable" class="sortable">
<thead>
<tr><th>Person</th><th>Monthly pay</th></tr>
</thead>
<tbody>
<tr><td>prabha Molby</td><td>£12,000</td></tr>
<tr><td>abcd Nicol</td><td>£8,500</td></tr>
<tr><td>steev McMahon</td><td>£9,200</td></tr>
<tr><td>John Barnes</td><td>£15,300</td></tr>
</tbody>
<tfoot>
<tr><td>TOTAL</td><td>£55,000</td></tr>
</tfoot>
</table>
的JavaScript
$(function() {
$("#ajax-append").click(function() {
setInterval(function() {
var request = $.get("assets/replacecontent.jsp", function(html) {
alert(html);
$('#resDiv').html(html);
var newTableObject = document.getElementById("myTable");
alert(newTableObject);
sorttable.makeSortable(newTableObject);
// alert($("#myTable").length);
});
}, 3000);
});
});
现在,如果有时间我对ajax响应进行排序,它会被排序但是在另一个响应之后它会再次改变它的顺序,但我希望它按照前一个顺序排序。
答案 0 :(得分:1)
我认为你应该已经阅读了sorttable.js常见问题所说的内容:
在加载页面时对表格进行排序
很多人都会问,“我如何将排序表排在第一位 页面加载的时间?“答案是:你没有。排序表是关于 在没有页面的情况下更改从服务器提供的HTML 刷新。首次从服务器提供页面时,您必须这样做 无论如何都要等待它的服务。所以,如果你想要这张桌子 在首次显示页面时排序,以排序方式提供表格 订购。表通常来自数据库;从中获取数据 数据库按排序顺序在SQL中使用ORDER BY子句。任何 解决方案,它涉及您一旦页面运行sorttable 加载(即没有用户输入)是一个错误的解决方案。
但他们也说了solution for that:
//Find the TH you want to use, maybe you can store that using an event handler before
var myTH = document.getElementsByTagName("th")[0];
//Then sort it
sorttable.innerSortFunction.apply(myTH, []);
但是,您必须找到用户之前点击的列,并且说实话我没有找到任何方式直接使用sorttable api。也许使用某种点击事件处理程序并存储最后点击的那个。