将数据输入表格并自动排序

时间:2016-10-04 06:20:00

标签: jquery html sorting html-table

我想弄清楚这个简单的问题。我希望用户能够输入数据,然后数据按升序自动排序到表中已提交的任何内容。我被困在自动分拣部分。这是我的JS小提琴 http://jsfiddle.net/6n4kugbp/

HTML

<input id="id_name" name="numid"/>
<input id="id_age" name="price"/>
<button id="add_btn">click</button>

<table border="1" class="mytab"></table> 

Jquery的

$("#add_btn").on('click', function(e) {
    e.preventDefault();
    var name = $('#id_numid').val(), 
        age = $('#id_price').val();

    $('<tr><td>'+numid+'</td><td>'+price+'</td></tr>').appendTo( $('.mytab') );
});

3 个答案:

答案 0 :(得分:1)

如果我对你的问题没有误解,可以试试这个:

<强>更新

我在添加新行时更新了自动排序的代码。您可以通过配置defaultSortColIndex值来更改默认排序顺序列。

&#13;
&#13;
$(function() {
  var defaultSortColIndex = 0;
  
  function sortTheTable() {
    var table = $('table');
    
    $('th')
      .wrapInner('<span title="sort this column"/>')
      .each(function() {
        var th = $(this),
          thIndex = th.index(),
          inverse = false;

        th.click(function() {
          table.find('td').filter(function() {
            return $(this).index() === thIndex;
          }).sortElements(function(a, b) {
            return $.text([a]) > $.text([b]) ?
              inverse ? -1 : 1 :
              inverse ? 1 : -1;
          }, function() {
            return this.parentNode;
          });

          inverse = !inverse;
        });
      });
    
    $('th').eq(defaultSortColIndex).trigger('click');
  };

  $('button#add_btn').on('click', function() {
    var sName = $('input#name').val();
    var sAge = $('input#age').val();

    if (isNaN(sAge)) {
      alert('Invalid age number.');
      return;
    }

    var sTr = '<tr>';
    sTr += '<td>' + sName + '</td>';
    sTr += '<td>' + sAge + '</td>';
    sTr += '</tr>';

    $('table').append(sTr);

    sortTheTable();
  });
});
&#13;
table {
  width: 100%;
}

.orderable {
  cursor: pointer;
  color: #00f;
}
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://rawgithub.com/padolsey/jQuery-Plugins/master/sortElements/jquery.sortElements.js"></script>

<input id="name" name="name"/>
<input id="age" name="age" />
<button id="add_btn">Add</button>

<table border="1" class="mytab">
  <tr>
    <th id="name" class="orderable">Name</th>
    <th id="age" class="orderable">Age</th>
  </tr>
</table>
&#13;
&#13;
&#13;

答案 1 :(得分:0)

像这样的东西

$("#add_btn").on('click', function(e) {
e.preventDefault();
var name = $('#id_numid').val(), 
    age = $('#id_price').val();
$('<tr><td>'+numid+'</td><td>'+price+'</td></tr>').appendTo( $('.mytab') );
sortTable($('.mytab'), "asc");
});

function sortTable(table, order) {
var asc   = order === 'asc',
    tbody = table.find('tbody');

tbody.find('tr').sort(function(a, b) {
    if (asc) {
        return $('td:first', a).text().localeCompare($('td:first', b).text());
    } else {
        return $('td:first', b).text().localeCompare($('td:first', a).text());
    }
}).appendTo(tbody);
}

答案 2 :(得分:0)

试试这个 - 希望它有所帮助,因为据我所知,你希望按年龄按升序对表数据进行排序,然后在代码下面工作。

使用.sort()方法。

如果您希望按名称排序 然后只需替换

  data.sort(function(a, b) {
    return a.age - b.age;
  });

  data.sort(function(a, b) {
     if(a.name < b.name ) return -1;
     if(a.name > b.name ) return 1;
     return 0;
  });

var data = [];

$("#add_btn").on('click', function(e) {
  e.preventDefault();
  var name = $('#id_name').val(),
    age = $('#id_age').val();

  var array = {
    "name": name,
    "age": age
  };

  data.push(array);

  data.sort(function(a, b) {
    return a.age - b.age;
  });

  $('.mytab').html('');
  $.each(data, function(index, value) {
    $('<tr><td>' + value.name + '</td><td>' + value.age + '</td></tr>').appendTo($('.mytab'));
  });

});
table {
  border-collapse: collapse;
  width: 100%;
}
table,
th,
td {
  border: 1px solid black;
}
th {
  font-weight: bold;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input id="id_name" name="name" placeholder="Enter a name here..." />
<input id="id_age" name="age" placeholder="Enter age here..." />
<button id="add_btn">Add</button>
<hr/>
<table>
  <thead>
    <tr>
      <th>Name</th>
      <th>Age</th>
    </tr>
  </thead>
  <tbody class="mytab"></tbody>
</table>