在对这个问题进行了一些修补后,我得出结论,问题是 由jQuery Tablesorter + jQuery TablesorterPager的组合使用引起的。没有寻呼机删除行并执行“更新”就足够了。
当您还包含寻呼机时,要正确执行此操作会变得更加困难(因为您正确地注意到存在一些缓存问题)。
但问题的主要原因是 jQuery Tablesorter 不被认为可用于您打算修改的表(在添加/删除行的意义上)。当您另外使用 TablesorterPager 时,这更适用。只需重新阅读 jQuery Tablesorter 的描述
tablesorter 是一个 jQuery 插件,用于将带有 THEAD 和 TBODY 标签的标准 HTML 表格转换为可排序的表格,而无需刷新页面。
TableSorter 的清晰简洁的应用领域。它甚至没有在页面上提及 ajax、编辑、删除、附加、..... 或类似术语。它仅用于对静态表进行排序。
所以实际的解决方案是......开始寻找另一个 jQuery “Table” 插件,该插件从一开始就具有可以修改表的意图/可能性。并且默认情况下支持此功能(删除,添加,....)
好的,但这里是解决方案:
jQuery Tablesorter + TablesorterPager 删除行(TR)
快速复制粘贴 javascript 源代码(基于TablesorterPager 示例的 HTML )
// "borrowed" from John Resig: Javascript Array Remove
// http://ejohn.org/blog/javascript-array-remove/
Array.prototype.remove = function(from, to) {
var rest = this.slice((to || from) + 1 || this.length);
this.length = from < 0 ? this.length + from : from;
return this.push.apply(this, rest);
};
//repopulate table with data from rowCache
function repopulateTableBody(tbl) {
//aka cleanTableBody from TableSorter code
if($.browser.msie) {
function empty() {
while ( this.firstChild ) this.removeChild( this.firstChild );
}
empty.apply(tbl.tBodies[0]);
} else {
tbl.tBodies[0].innerHTML = "";
}
jQuery.each(tbl.config.rowsCopy, function() {
tbl.tBodies[0].appendChild(this.get(0));
});
}
//removes the passed in row and updates the tablesorter+pager
function remove(tr, table) {
//pager modifies actual DOM table to have only #pagesize TR's
//thus we need to repopulate from the cache first
repopulateTableBody(table.get(0));
var index = $("tr", table).index(tr)-2;
var c = table.get(0).config;
tr.remove();
//remove row from cache too
c.rowsCopy.remove(index);
c.totalRows = c.rowsCopy.length;
c.totalPages = Math.ceil(c.totalRows / config.size);
//now update
table.trigger("update");
//simulate user switches page to get pager to update too
index = c.page < c.totalPages-1;
$(".next").trigger("click");
if(index)
$(".prev").trigger("click");
}
$(function() {
var table;
//make all students with Major Languages removable
$('table td:contains("Languages")').css("background-color", "red").live("click", function() {
remove($(this).parents('tr').eq(0), table);
});
//create tablesorter+pager
// CHANGED HERE OOPS
// var table = $("table#tablesorter");
table = $("table#tablesorter");
table.tablesorter( { sortList: [ [0,0], [2,1] ] } )
.tablesorterPager( { container: $("#pager")} );
});
我用我的解决方案为您制作了一个测试页(单击红色的 TD == 删除该行)。
http://jsbin.com/uburo(源代码为http://jsbin.com/uburo/edit)
如果关于如何/为什么/....的问题仍然存在