我正在为一个带有表格的页面写一个greasemonkey user.js。 (表格是100行乘18列。)现在我要做的是让它在列上排序,并让它在Chrome和Firefox中运行。
到目前为止,所有搜索答案都会产生使用jquery / dojo或类似内容的建议。
我可以在没有任何外部代码的情况下完成吗?所有这只是以不同的顺序替换行的问题,对吧?或者这是一个愚蠢的说法?
问题是我已经在使用dojo来满足某些查询需求,但由于我希望它能够在Firefox和Chrome中运行,我只需在我的脚本中复制粘贴整个dojo的东西..
此外,到目前为止我发现的大多数解决方案似乎更适合在构建表时使用,而不是用于更改现有表。
感谢任何帮助。
编辑:表格中的所有单元格都包含数字。
答案 0 :(得分:3)
聪明的方法是使用像tablesorter这样的工具 但是,既然你不想使用外部代码(现在),那就可以通过艰难的方式完成。
这是如何以半硬的方式做到这一点。请注意,我使用jQuery AM 。你很聪明地将至少包含在你的脚本中。
继续use the // @require
directive。您仍然可以使用Tampermonkey extension在Chrome中运行GM脚本
(还有other ways of including jQuery in GM scripts under Chrome。)
无论如何,像这样的代码:会做的伎俩:
//--- Get the table we want to sort.
var jTableToSort = $("table#myTable");
//--- Get the rows to sort, but skip the first row, since it contains column titles.
var jRowsToSort = jTableToSort.find ("tr:gt(0)");
//--- Sort the rows in place.
jRowsToSort.sort (SortByFirstColumnTextAscending).appendTo (jTableToSort);
function SortByFirstColumnTextAscending (zA, zB)
{
var ValA_Text = $(zA).find ("td:eq(0)").text ();
var ValB_Text = $(zB).find ("td:eq(0)").text ();
if (ValA_Text > ValB_Text)
return 1;
else if (ValA_Text < ValB_Text)
return -1;
else
return 0;
}
你可以see it in action at jsFiddle。
要对数字进行排序,您可以使用以下排序功能:
function SortBy2ndColumnNumber (zA, zB)
{
var ValA = parseFloat ($(zA).find ("td:eq(1)").text () );
var ValB = parseFloat ($(zB).find ("td:eq(1)").text () );
return ValA - ValB;
}
答案 1 :(得分:2)
我试图不回答这些“我可以请一些代码吗”的问题,但是因为安德斯需要我。这是一个没有库的简单答案。但是有一些很大的假设:
Array.prototype.slice.call
技巧。 你可以很好地改进getRowValue以超越假设#1。
function sortTable(table, col) {
var rows = Array.prototype.slice.call(table.getElementsByTagName('tr'), 0);
rows.sort(function(a,b) {
return getRowValue(a, col) - getRowValue(b, col);
});
for (var i=0, row; row = rows[i]; i++) {
table.appendChild(row);
}
function getRowValue(row, col) {
return parseInt(row.cells[col].innerHTML, 10);
}
}
DEMO: http://jsbin.com/akexe4