jquery - 获取表格单元格值并按字母顺序排序

标签 jquery

我创建了一个表。首先,我使用按钮获取第二列的 td 值。我将值发送到数组。后来我调用排序函数,我想将排序后的值写入第二列的 td 值。我的错误在哪里?还有有什么不同的方法吗?

    <html>
    <head>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.2/jquery.min.js"></script>
    </head>
    <body>
        <input type="button" value="Sort" id="sort"></input>
                <table cellpadding="1" cellspacing="1" id="mytable" border="1">
                <tr>
                    <td>Coby</td>
                    <td>Vanna</td>
                    <td>Balurghat</td>
                </tr>
                <tr>
                    <td>Arsenio</td>
                    <td>Ignacia</td>
                    <td>Tramutola</td>
                </tr>
                <tr>
                    <td>Kenneth</td>
                    <td>Gretchen</td>
                    <td>Penhold</td>
                </tr>
                <tr>
                    <td>Aquila</td>
                    <td>Breanna</td>
                    <td>Liverpool</td>
                </tr>
                <tr>
                    <td>Dane</td>
                    <td>Isadora</td>
                    <td>Silverton</td>
                </tr>
                <tr>
                    <td>Jerry</td>
                    <td>Mari</td>
                    <td>Thon</td>
                </tr>
                <tr>
                    <td>Kareem</td>
                    <td>Courtney</td>
                    <td>Senneville</td>
                </tr>
                <tr>
                    <td>Fulton</td>
                    <td>Karen</td>
                    <td>Berloz</td>
                </tr>
                <tr>
                    <td>Quamar</td>
                    <td>Quon</td>
                    <td>Zamora</td>
                </tr>
                </table>
        <script type="text/javascript" language="javascript">
        $("#sort").click(function(){
            $('#mytable tr').each(function() {
                var arr=[];
                var x = $(this).find("td").eq(1).text();        
                arr.push(x);
                SortElements();
            });         
        })


        function SortElements() {
        arr.sort(alphabetical);
            alert(arr);
        }   
        function alphabetical(a, b)
        {
             var A = a.toLowerCase();
             var B = b.toLowerCase();
             if (A < B){
                return -1;
             }else if (A > B){
               return  1;
             }else{
               return 0;
             }
        }
    </script>   
    </body>
    </html>

最佳答案

一些事情:您实际上并没有将任何内容写回您发布的代码中的表中。

SortElements()每次从另一个 <tr> 读取值时都会调用。只需先收集所有值,然后完成$('#mytable tr').each()循环,调用SortElements()一次。

您正在删除您的 arr$('#mytable tr').each() 内的每次迭代通过这样做var arr=[];在循环之前执行一次。

$("#sort").click(function(){
    var arr = [];

    $('#mytable tr').each(function() {
        var x = $(this).find("td").eq(1).text();        
        arr.push(x);
    }).promise().done(function(){
        arr = sort_elements(arr);
        var i = 0;

        // Simply loop again and insert the object with
        // that index.
        $('#mytable tr').each(function() {
            $(this).find("td").eq(1).text(arr[i++]);
        });
    });
});

使用$(elem).each().promise().done()构建 each()方法 then-able(参见 this answer )。

还有你的sort_elements收到 arr作为参数

function sort_elements(arr) {
    arr.sort(alphabetical);
    return arr
}

关于jquery - 获取表格单元格值并按字母顺序排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37576555/

相关文章:

jquery - 单击查询清除输入字段

javascript - 无法设法从文件名中删除变音符号

jquery - 如何在 jQuery 中获取之前的评论元素?

javascript - Owlcarousel 2 在初始化后更改设置

javascript - w3school 包括 HTML,javascript 不工作

jquery - Laravel 5 Controller 不会从 ajax 表单接收数据

javascript - 如何在我的网站中显示其他网站的内容

javascript - 如何让 jQuery 仅触发精确绑定(bind)事件

jquery - Chrome 自动完成文本输入可防止触发 keydown 事件(jquery)

jquery - 重写 jQuery 验证突出显示/取消突出显示方法