2016-09-26 44 views
1

我正在使用下面的函数和代码来按列对表进行排序,它工作正常,但有没有一种方法我不能用click事件重复我的自我,即只有一个单击事件并使用列标题的ID或数据ID。 谢谢!从元素id创建动态变量名

function sortTable(f,n){ 
     var rows = $('#mytable tbody tr').get(); 

     rows.sort(function(a, b) { 

      var A = getVal(a); 
      var B = getVal(b); 

      if(A < B) { 
       return -1*f; 
      } 
      if(A > B) { 
       return 1*f; 
      } 
      return 0; 
     }); 

     function getVal(elm){ 
      var v = $(elm).children('td').eq(n).text().toUpperCase(); 
      if($.isNumeric(v)){ 
       v = parseInt(v,10); 
      } 
      return v; 
     } 

     $.each(rows, function(index, row) { 
      $('#mytable').children('tbody').append(row); 
     }); 
    } 
    var f_sl = 1; // flag to toggle the sorting order 
    var f_nm = 1; // flag to toggle the sorting order 

    $("#sl").click(function(){ 
     f_sl *= -1; // toggle the sorting order 
     var n = $(this).prevAll().length; 
     sortTable(f_sl,n); 
    }); 

    $("#nm").click(function(){ 
     f_nm *= -1; // toggle the sorting order 
     var n = $(this).prevAll().length; 
     sortTable(f_nm,n); 
    }) 

回答

1

,你可以做这样的:

$("#sl, #nm").click(function(){ 
    var id = $(this).attr('id'); 
    if(id == 'sl') 
    f_sl *= -1; 
    else 
    f_nm *= -1; 

    var n = $(this).prevAll().length; 

    if(id == 'sl') 
    sortTable(f_sl,n); 
    else 
    sortTable(f_nm,n); 
}); 
1

更改排序变量的一个对象

var colSort = { 
    f_sl : 1, 
    f_nm : 1 
} 

然后你就可以与元素的ID

引用这些性质很简单
var $cols = $("#sl, #nm").click(function(){ 
    var idx = $cols.index(this), sorter = colSort['f_' + this.id]; 
    sorter *= -1; 
    sortTable(sorter, idx); 
});