【问题标题】:Group table rows based on classname根据类名对表行进行分组
【发布时间】:2017-06-18 04:13:25
【问题描述】:

我希望能够按类名对表中的行进行排序,以便所有具有类 selected 的行首先出现,rejected 出现在最后。

为了澄清,我想把它改一下

<table>
  <tbody>
    <tr><td><span class="selected">WAHEED</span></td></tr>
    <tr><td><span class="selected">DON</span></td></tr>
    <tr><td><span class="rejected">JACK</span></td></tr>
    <tr><td><span class="selected">MARK</span></td></tr>
    <tr><td><span class="rejected">GATEES</span></td></tr>
  </tbody>
</table>

变成这样的:

<table>
  <tbody>
    <tr><td><span class="selected">WAHEED</span></td></tr>
    <tr><td><span class="selected">MARK</span></td></tr>
    <tr><td><span class="selected">DON</span></td></tr>
    <tr><td><span class="rejected">JACK</span></td></tr>
    <tr><td><span class="rejected">GATEES</span></td></tr>
  </tbody>
</table>

请注意两个代码示例之间的顺序变化。
关于如何实现这一目标的任何想法?

【问题讨论】:

  • 到目前为止您尝试过什么?如果您还没有尝试过任何东西,那么我无法帮助您,因为您的源代码没有具体问题,除了不写任何东西。
  • 我想知道我该怎么做,只有我可以尝试。
  • @NewToJS 一旦这个问题与我的相似,请看这个问题:stackoverflow.com/questions/41978354/…
  • 下面的答案向您展示了如何“如何使用类名对表进行排序”,现在由您将其嵌入到您现有的源代码中。

标签: javascript html sorting filter html-table


【解决方案1】:

应该这样做:

var rows = document.querySelectorAll('table.sorted tr');
for (i = 0; i < rows.length; i++) {
  if (rows[i].querySelector('span.rejected')) {
      rows[i].closest('tbody').appendChild(rows[i]);
      }
}
<table class="sorted">
<tbody>
<tr><td> 1. </td><td><span class="selected">WAHEED</span></td></tr>
<tr><td> 2. </td><td><span class="selected">DON</span></td></tr>
<tr><td> 3. </td><td><span class="rejected">JACK</span></td></tr>
<tr><td> 4. </td><td><span class="selected">MARK</span></td></tr>
<tr><td> 5. </td><td><span class="rejected">GATEES</span></td></tr>
</tbody>
</table>

它在页面中的所有&lt;table&gt;s 上运行sorted 类,并将包含rejected 类的span 的&lt;tr&gt;s 放在最后(因此所有其他人都保留在上面)。随意修改它以满足您的需求,它非常简单。

【讨论】:

  • 真棒让我试试我希望它对我有用...@Andrei
  • 请注意问题中您的HTML 代码有错误:&lt;tbody&gt; 标记以&lt;tbode&gt; 开头。这将使您尝试的任何解决方案都失败,因为您的桌子上没有有效的&lt;tbody&gt;。尽管某些浏览器(即 Chrome),当您的&lt;table&gt; 没有有效的&lt;tbody&gt; 时会自动添加一个。并非所有浏览器都如此,但不要依赖它。
  • 看到这个问题,一旦我需要类似这样的回应后我该怎么做..? :stackoverflow.com/questions/41978354/…@Andrei
  • @LyndaCarter 我提供的答案是为了可读性而专门编码的,因此您可以理解它的逻辑并轻松地在自己的应用程序中实现它。 StackOverflow 的使命是帮助程序员提高编码技能并更好地理解编码原则。提供免费编程服务不是 SO 使命的一部分。如果您需要编程服务,我建议您聘请程序员。
【解决方案2】:

你的意思是这样的

 var people, asc1 = 1,
        asc2 = 1,
        asc3 = 1;
    window.onload = function () {
        people = document.getElementById("people");
    }

    function sort_table(tbody, col, asc) {
        var rows = tbody.rows,
            rlen = rows.length,
            arr = new Array(),
            i, j, cells, clen;
        // fill the array with values from the table
        for (i = 0; i < rlen; i++) {
            cells = rows[i].cells;
            clen = cells.length;
            arr[i] = new Array();
            for (j = 0; j < clen; j++) {
                arr[i][j] = cells[j].innerHTML;
            }
        }
        // sort the array by the specified column number (col) and order (asc)
        arr.sort(function (a, b) {
            return (a[col] == b[col]) ? 0 : ((a[col] > b[col]) ? asc : -1 * asc);
        });
        // replace existing rows with new rows created from the sorted array
        for (i = 0; i < rlen; i++) {
            rows[i].innerHTML = "<td>" + arr[i].join("</td><td>") + "</td>";
        }
    }

http://codepen.io/_adamjw3/pen/pRaXBg

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2017-10-09
  • 2013-12-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-28
  • 2023-02-07
相关资源
最近更新 更多