【问题标题】:How to update tablesorter onclick in dynamic table?如何更新动态表中的tablesorter onclick?
【发布时间】:2014-04-15 13:24:18
【问题描述】:

我正在尝试在动态 HTML 表上使用 tablesorter。当表中的数据发生变化,我尝试排序时,表就乱了;它将以前的数据和当前的数据相加并合并到一个表中,它还在对其他表进行排序!!当表格更改时,我怎样才能做到这一点,tablesorter 会更新?我正在使用 jQuery 从 .csv 填充表,并且该表是动态的,因为该表所在的 HTML 页面具有多个文件名,如果单击一个,该文件中的数据将加载到该表中

我正在使用多个表格和一个表格排序器,但这是我的一张表格:

<div id="origtable">
    <table border="1" id="table_side">
        <thead>
            <tr>
              <th>Origin <br> Country</th>

              <th>Count</th>
            </tr>
        </thead>
        <tbody></tbody>
    </table>    
</div>

这是我的 tablesorter:

/* tried this at first because I'm waiting for data from .csv file to populate table
setInterval(function(){sortStuff()},1000);
    function sortStuff(){
        $("table").tablesorter({ 
        sortList: [[1,1]]
        });
        $("table").trigger("update");
    }
*/
$(document).ready(function(){
    $("table").tablesorter({ 
        sortList: [[0,1]]
        });
    });

    $("table").on( "click", function() {
    $("table").trigger("update");
});

编辑 1: 从 .csv 读取后用于填充 html 表的 jquery 函数(此 jquery 代码位于单独的 .js 文件中)

function populateTableCounts(rowkey, tablename, hashdata)
    {
        var rowhtml = "";
        $.each(hashdata, function (key, value) {
             key = key.replace(/-/g, ' / ');
             key = key.replace(/:/g, ' , ');

             var rowdata=countrow.replace('$row_key', key);
             rowdata=rowdata.replace('$row_val', value);

            //add row <tr> to var rowhtml   
            rowhtml += rowdata;          
        });

        //append populated rowhtml to TBODY
        $('#' + tablename + ' tbody').append(rowhtml);
    }

【问题讨论】:

  • 我不知道 tablesorter 是如何工作的,但我认为你需要调用 $("table").tablesorter({ sortList: [[0,1]] }); });再次代替 $("table").trigger("update");
  • @HaSuKrOnOs 没解决,当表动态变化时,它会从上一个表中添加行。
  • 是的,忽略那个,检查我的回答我认为问题是因为你没有做这个 con 文件加载。

标签: javascript jquery html tablesorter


【解决方案1】:

忽略我的评论是触发(“更新”)你需要的功能,但请检查此代码是否有效

$(document).ready(function(){
     $("table").tablesorter({ 
           sortList: [[0,1]]
     });

     $("table").click(function(){ $("table").trigger("update"); });
});

编辑

如果你使用 get 来获取 csv 数据,你需要这样的东西:

$.get("your/csv/file.csv",function(csv){
   //... code that handle your csv and put into table
   //...

   //AT END UPDATE TABLE
   $("table").trigger("update");
});

编辑2

function populateTableCounts(rowkey, tablename, hashdata)
{
    var rowhtml = "";
    $.each(hashdata, function (key, value) {
         key = key.replace(/-/g, ' / ');
         key = key.replace(/:/g, ' , ');

         var rowdata=countrow.replace('$row_key', key);
         rowdata=rowdata.replace('$row_val', value);

        //add row <tr> to var rowhtml   
        rowhtml += rowdata;          
    });

    //append populated rowhtml to TBODY
    $('#' + tablename + ' tbody').append(rowhtml);

    //You can do this
    $('#' + tablename).trigger("update");

    //or this if you want $('table').trigger('update');
}

您可以毫无问题地执行此操作,您需要注意必须加载元素,以便在 $(document).ready 上执行所有操作。

如果js脚本在另一个文件上也没问题。

【讨论】:

  • 这不会添加以前的行,但一个问题是加载的页面排序错误的列(它应该按降序对第二列进行排序,因为“sortList:[[0,1]]” ) 另一个问题是,当我单击一个表上的列标题时,它也会对其他几个表进行排序。
  • 好的,所以你需要在加载数据的时候做$("table").trigger("update"),你是怎么加载数据的?
  • 使用 jquery 从 .csv 文件
  • 我看到了你的编辑,我现在可以看到我的问题,但我不能完全使用那个代码,所以你能告诉我一些代码等待半秒钟(直到表格从 .csv 填充) 在我使用表格排序器之前?
  • 您可以使用 setTimeout,w3schools.com/jsref/met_win_settimeout.asp,但请告诉我您的代码,我确信我们可以找到更好的解决方案
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-22
  • 1970-01-01
  • 1970-01-01
  • 2019-10-19
  • 2012-01-18
  • 2021-11-19
相关资源
最近更新 更多