我在排序表格时遇到问题。

我的表格HTML是这样的:

<table>
<tr>
  <td>3</td>
  <td>1</td>
</tr>
<tr>
  <td>2</td>
  <td>4</td>
</tr>
</table>


我希望它看起来像这样:

<table>
<tr>
  <td>1</td>
  <td>2</td>
</tr>
<tr>
  <td>3</td>
  <td>4</td>
</tr>
</table>


这是我当前的排序代码:



var rows = $('tr');

rows.eq(0).find('td').sort(function(a, b) {
  return $.text([a]) > $.text([b]) ? 1 : -1;
}).each(function(newIndex) {
  var originalIndex = $(this).index();
  rows.each(function() {
var td = $(this).find('td');
if (originalIndex !== newIndex)
  td.eq(originalIndex).insertAfter(td.eq(newIndex));
});
  });

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<table>
  <tr>
    <td>3</td>
    <td>1</td>
  </tr>
  <tr>
    <td>2</td>
    <td>4</td>
  </tr>
</table>





该代码仅按单独的行进行排序。我不能使用任何插件,而我需要使用jquery或javascript来做到这一点。谁能建议如何使其工作?

最佳答案

这很简单。


将来自td的所有数字存储在数组中。
对数组进行排序。
根据数组修改td


这是您在JS中执行的操作:

var tds= [].slice.call(document.getElementsByTagName("td")); //Find <td> and store in array
var tdsa=tds.map(function (a) {return Number(a.innerHTML);}); //Take the innerHTMLs
tdsa.sort(); //Sort it
tds.forEach(function(a,i) {a.innerHTML=tdsa[i]}); //Modify <td>'s innerHTML

09-11 08:01
查看更多