【问题标题】:Sort multiple tables with the same function using Javascript使用 Javascript 对具有相同功能的多个表进行排序
【发布时间】:2018-03-28 05:31:27
【问题描述】:

我正在尝试使用 Javascript 中的相同函数对多个表进行排序。这些表格都是相似的,我只是希望它能够在您单击表格标题时按字母顺序或数字顺序(从高到低)排序,当您再次单击标题时,它会排序反向排列(例如从最低到最高)。

我使用了 W3 Schools 的这个代码:https://www.w3schools.com/howto/tryit.asp?filename=tryhow_js_sort_table_desc

它适用于仅对一张表进行排序。但是,当我将“GetElementById”更改为“GetElementsByClassName”时它不起作用。

以下是我修改后的 HTML 代码:忽略 NFL 内容,因为它只是我用来测试表格内容的数据)

<table border="1" class="supTable">
            <tr>
                <th onclick="sortTable(0)"> Team Name</th>
                <th onclick="sortTable(1)">Super Bowls</th>
            </tr>
            <tr>
                <td>Atlanta Falcons</td>
                <td>0</td>
            </tr>
            <tr>
                <td>Dallas Cowboys</td>
                <td>4</td>
            </tr>
            <tr>
                <td>Houston Texans</td>
                <td>0</td>
            </tr>
            <tr>
                <td>Green Bay Packers</td>
                <td>3</td>
            </tr>
            <tr>
                <td>New England Patriots</td>
                <td>5</td>
            </tr>
            <tr>
                <td>Oakland Raiders</td>
                <td>2</td>
            </tr>
            <tr>
                <td>New York Giants</td>
                <td>2</td>
            </tr>
            <tr>
                <td>Miami Dolphins</td>
                <td>1</td>
            </tr>
        </table>
    </div>
    <div id="supAfc">
        <table border="1" class="supTable">
            <tr> 
                <th onclick="sortTable(0)"> Team Name</th>
                <th onclick="sortTable(1)">Super Bowls</th>
            </tr>
            <tr>
                <td>Houston Texans</td>
                <td>0</td>
            </tr>
            <tr>
                <td>New England Patriots</td>
                <td>5</td>
            </tr>
            <tr>
                <td>Oakland Raiders</td>
                <td>2</td>
            </tr>
            <tr>
                <td>Miami Dolphins</td>
                <td>1</td>
            </tr>
        </table>
    </div>
    <div id="supNfc">
        <table border="1" class="supTable">
            <tr>
                <th onclick="sortTable(0)"> Team Name</th>
                <th onclick="sortTable(1)">Super Bowls</th>
            </tr>
            <tr>
                <td>Atlanta Falcons</td>
                <td>0</td>
            </tr>
            <tr>
                <td>Dallas Cowboys</td>
                <td>4</td>
            </tr>
            <tr>
                <td>Green Bay Packers</td>
                <td>3</td>
            </tr>
            <tr>
                <td>New York Giants</td>
                <td>2</td>
            </tr>
        </table>
    </div>

这是 Javascript 代码:

function sortTable(n) {
var table, rows, switching, i, x, y, shouldSwitch, dir, switchcount = 0;

table = document.getElementsByClassName("supTable");
switching = true;
dir = "asc"; 
while (switching) {
    switching = false;
    rows = table.getElementsByTagName("TR");
    for (i = 1; i < (rows.length - 1); i++) {
        shouldSwitch = false;
        x = rows[i].getElementsByTagName("TD")[n];
        y = rows[i + 1].getElementsByTagName("TD")[n];
        if (dir == "asc") {
            if (x.innerHTML.toLowerCase() > y.innerHTML.toLowerCase()) {
            shouldSwitch= true;
            break;
            }
        } else if (dir == "desc") {
            if (x.innerHTML.toLowerCase() < y.innerHTML.toLowerCase()) {
                shouldSwitch= true;
                break;
            }
        }
    }
    if (shouldSwitch) {
        rows[i].parentNode.insertBefore(rows[i + 1], rows[i]);
        switching = true;
        switchcount ++;      
    } else {
        if (switchcount == 0 && dir == "asc") {
        dir = "desc";
        switching = true;
        }
    }
}
}

我想我知道为什么类选择器不起作用,如果它能让我得到结果,我很乐意尝试不同的功能。 有人可以帮我使用 Javascript,最好不要使用 jQuery,因为我目前不熟悉 jQuery。

我只是希望能够在多个表上使用相同的功能,因此我不必多次复制和粘贴相同的代码并每次都更改 Id 选择器。

编辑 - 有几个人提到了一个关于查询选择器的不同问题。我将如何使用查询或类选择器来正确调用/解决我的问题?

【问题讨论】:

标签: javascript jquery html sorting html-table


【解决方案1】:

我还没有测试过。试试看它是否有效:

 <table border="1" class="supTable1">
        <tr>
            <th onclick="sortTable('supTable1', 0)"> Team Name</th>
            <th onclick="sortTable('supTable1', 1)">Super Bowls</th>
[...]
 <div id="supAfc">
    <table border="1" class="supTable2">
        <tr> 
            <th onclick="sortTable('supTable2', 0)"> Team Name</th>
            <th onclick="sortTable('supTable2', 1)">Super Bowls</th>
        </tr>

并将javascript函数更改为:

 function sortTable(tableClass, n) {
     var table, rows, switching, i, x, y, shouldSwitch, dir, switchcount = 0;

     table = document.getElementsByClassName(tableClass)[0];
     switching = true;
     dir = "asc";

(我仍然不明白为什么你的帖子一开始就被否决了)

【讨论】:

  • 您好,感谢您的回复并提供帮助。我试过你的代码,但它似乎对我不起作用。也许我输入错了。我也不知道为什么我的帖子被降级了。我今天真的注册问这个问题,并且对为什么有人拒绝它感到非常困惑。
  • 我想我知道问题出在哪里了。 getElementsByClassName 返回一个数组。您需要选择第一个元素,因此 getElementsByClassName[0] 是正确的方法。试试看,告诉我它是否有效。
  • 是的,我尝试将 [0] 添加到它,这有效,但仅适用于类中的第一个数组。因此,如果您添加 [0],则第一个表格在您对其进行排序时有效,但该类中的其他表格则无效。将 [0] 更改为 [1],然后第二个表有效,但其他表无效。不知道有没有办法一次调用类中的所有数组?
  • 确保更改班级。看我的代码。我更改了表“supTable1”和“supTable2”的类名。在 class="" 属性和点击事件中的 javascript 函数调用中。您必须应用所有更改。
  • 这可能解决了我的问题!它现在似乎正在工作。我想我忘了重命名其中一个类。我将把它添加到更多的表格中,然后让你知道它是否仍然有效。手指交叉。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-01-26
  • 1970-01-01
  • 2016-07-12
  • 2012-10-20
  • 2014-05-30
  • 2021-07-14
  • 1970-01-01
相关资源
最近更新 更多