如何在greasemonkey中对现有表进行排序?

pla*_*oud 6 javascript sorting greasemonkey

我正在为一个带有表格的页面写一个greasemonkey user.js.(表格是100行乘18列.)现在我想做的是让它在列上排序,并让它在Chrome和Firefox中运行.

到目前为止,所有搜索答案都会产生使用jquery/dojo或类似内容的建议.

没有任何外部代码我可以完成吗?所有这只是以不同的顺序替换行的问题,对吧?或者这是一个愚蠢的说法?

问题是我已经在使用dojo来满足某些查询需求,但由于我希望它能够在Firefox和Chrome中运行,我只需在我的脚本中复制粘贴整个dojo的东西.

此外,到目前为止我发现的大多数解决方案似乎更适合在构建表时使用,而不是用于更改现有表.

任何帮助表示赞赏.

编辑:表格中的所有单元格都包含数字.

Bro*_*ams 3

聪明的方法是使用像tablesorter这样的工具。
但是,由于您不想使用外部代码(目前),因此可以通过困难的方式来完成。

以下是如何以半困难的方式做到这一点。请注意,我正在使用 jQuery。明智的做法是至少将其合并到您的脚本中。

继续使用该// @require指令您仍然可以使用Tampermonkey 扩展在 Chrome 中运行 GM 脚本。
(还有其他方法可以将 jQuery 包含在 Chrome 下的 GM 脚本中。)

不管怎样,像这样的代码:就能解决问题:

//--- 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;
}
Run Code Online (Sandbox Code Playgroud)


您可以在 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;
}
Run Code Online (Sandbox Code Playgroud)

请参阅 jsFiddle 中的数字排序操作