在对这个问题进行了一些修改后,我得出了 jQuery Tablesorter + jQuery TablesorterPager 的组合使用 出现 问题。没有寻呼机删除行并执行“更新”就足够了。
当您还包含寻呼机时,要正确执行此操作会变得更加困难(因为您正确地注意到存在一些缓存问题)。
但您的问题的主要原因是 jQuery Tablesorter 不被认为可用于您打算修改的表(在添加/删除行的意义上)。当您另外使用 TablesorterPager 时,这更适用。重读一下jQuery Tablesorter的描述
tablesorter 是一个 jQuery 插件
用
THEAD 和 TBODY 标签放入一个可排序的
没有页面刷新的表格。
TableSorter 的应用领域简洁明了。它甚至没有在页面上提及 ajax、编辑、删除、附加、..... 或类似术语。 仅用于对静态表进行排序。
所以实际的解决方案是......开始寻找另一个 jQuery “Table” 插件,该插件从一开始就具有可以修改表格的意图/可能性。并且默认情况下支持此功能(删除,添加,....)
好的,但这里是解决方案:
jQuery Tablesorter + TablesorterPager 删除行(TR)
javascript源代码的快速复制粘贴(基于TablesorterPager example的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)
如果问题仍然存在于如何/为什么/....评论