我正在为其中带有表格的页面编写一个acobsmonkeyuser.js。 (表是100行乘18列。)现在我要做的是使其在列上可排序,并使其同时在Chrome和Firefox中运行。
到目前为止,所有对答案的搜索都提出了使用jquery/dojo之类的建议。
我可以在没有任何外部代码的情况下完成吗?经常,所有这些只是以不同顺序替换行的问题,对吗?还是这很愚蠢?
事实是我已经在使用dojo来满足某些查询需求,但是由于我希望它同时在Firefox和Chrome中运行,因此我只是将整个dojo内容复制并粘贴到脚本中。
而且,到目前为止,我发现的大多数解决方案似乎更多用于构建表,而不是用于更改现有表。
任何帮助表示赞赏。
编辑:表中的所有单元格均包含数字。
最佳答案
聪明的方法是使用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;
}
See number sorting in action at jsFiddle 。