从id的id创建动态变量名

时间:2016-09-26 09:52:43

标签: jquery

我正在使用以下函数和代码按列对表进行排序,它工作正常但有一种方法我不能用click事件重复我自己,即只有一次点击事件并使用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);
    })

2 个答案:

答案 0 :(得分: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 :(得分: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);
});