2016-09-26 43 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); 
});