jquery - 如何制作2路 `up`和 `down` td文本 `sort`

标签 jquery sorting

我正在尝试创建一个排序函数,它有效。但我想采用反之亦然(向上和向下)排序的两种方法。目前我正在使用一种sort工作方式,当用户点击返回时我想按相反方向排序。

我仍然添加了我的条件不起作用:

var tableMaker = function (columNames, parent, data) {
    var table = $('<table />', {
        id:"example",
        class:"table table-striped table-bordered"
    })
    .append($('<thead><tr><th>Select All <input type="checkbox" /></th></tr></thead>'))
    .append($('<tbody></tbody>'));
   // .append($('<tfoot><tr></tr></tfoot>'));
   
    var thead = columNames.map(function (item) {
        return "<th>" + item + " <button class="+item.replace(' ', '')+">Sort</button></th>";
    });
    
    var tbody = data.map(function (item, index) {
        var tr = $('<tr />', {id:item.ID});
            tr.append('<td><input type="checkbox" /></td>')
        columNames.map(function (label) {
            var label = label.replace(' ', '');
            var labelData = item[label];
            tr.append('<td>' + labelData + '</td>')
        });
        return tr;
    });
    
    table
    .find('thead tr')
    .append(thead).end()
    .find('tfoot tr')
    .append(thead).end()
    .find('tbody')
    .append(tbody)
    parent.append(table); //appending to parent
    
    //events goes here
    
    $('button').on('click', function () {
        var rows = $(this).parents('table').find('tbody tr');
        var index = $(this).parent().index();
       
        rows.sort(function(a, b) {
           var A = $(a).children('td').eq(index).text().toUpperCase();
           var B = $(b).children('td').eq(index).text().toUpperCase();
           return A < B ? -1 : A > B ? 1 : 0;
       });
        
       $(this).parents('table').find('tbody').append(rows);
        
    });
    
};

var initTable = function (parent) {
    var columNames = ['Organization Name', 'Zip Code', 'Telephone', 'Organization TypeName' ];

    var data = $.getJSON('https://tcs.firebaseio.com/d/DocPageDetails/d/Organizations.json');
    
    data.done(function (data) {
        tableMaker(columNames, parent, data);
    });
}

initTable($('#container'));
body { font-size: 140%; }
#container table {

}

button {
    font-size:80%;
}
<link href="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.2/css/bootstrap.min.css" rel="stylesheet"/>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id ="container"></div>

条件:

return A < B ? -1 : A > B ? 1 : 0;

最佳答案

我将添加一个元素来指示第 th 中的排序方向(默认为 -):

.append($('<thead><tr><th>Select All <input type="checkbox" /><span id="direction">-</span></th></tr></thead>'))

然后更改点击以阅读并根据此进行不同的行为:

$('button').on('click', function () {
    var table = $(this).parents('table');
    var rows = table.find('tbody tr');
    var index = $(this).parent().index();
    var direction_span = table.find('thead th span');
    var direction_text = direction_span.text();
    var direction = (direction_text == "-" ? 0 :
                       (direction_text == "U" ? 1 : -1));

    rows.sort(function(a, b) {
       var A = $(a).children('td').eq(index).text().toUpperCase();
       var B = $(b).children('td').eq(index).text().toUpperCase();
       //reverse the sort relative to the direction
       if(direction<=0)
          return A < B ? -1 : A > B ? 1 : 0;
       else
          return A > B ? -1 : A > B ? 1 : 0;
   });

   table.find('tbody').append(rows);

   //then reverse the direction symbol
   if(direction<=0)
     direction_span.text("U");
   else
     direction_span.text("D");
});

关于jquery - 如何制作2路 `up`和 `down` td文本 `sort`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28736504/

相关文章:

javascript - Addy Osmanis pub/sub,难以理解代码

javascript - 将 .val() 转换为字符串 jQuery

javascript - 在 sort() 函数之后 AppendTo tbody

java - 将对象类型和字段传递给比较器

Java:TreeSet 和 LinkedList 的问题

c - 按名称排序结构(双向链表)

javascript - 除非刷新页面,否则平滑滚动在 Rails 中不起作用

javascript - 选择发送到 JQuery 函数的项目

javascript - 事件监听器、JavaScript

sorting - 壳排序与插入/冒泡排序的优势是什么?