【问题标题】:JQuery table sorter problemjQuery表格排序器问题
【发布时间】:2008-12-15 21:25:24
【问题描述】:

我了解到,通过尝试使用 jquery 中的 tablesorter 插件,表需要使用 和

标签。我正在使用 html 表,并且我使用 runat="server" 属性,因为我需要将数据绑定到服务器端的表。但是通过使用 runat= server 属性,代码以不同的方式呈现......而不是看起来像这样的视图源,这就是我的标记视图中的内容:
<table id="Table">
    <thead>
        <tr> <th>1st</th> <th>2nd</th> <th>3rd</th> </tr>
    </thead>
    <tbody>
        <tr><td>1st value</td><td>2nd value</td><td>3rd value</td></tr>
        <tr><td>1st value</td><td>2nd value</td><td>3rd value< /td></tr>
        <tr><td>1st value</td><td>2nd value</td><td>3rd value</td></tr>
        <tr><td>1st value</td><td>2nd value</td><td>3rd value</td></tr>
    </tbody>
</table>

看起来像这样,但没有 和

标签。这会使表格排序器无法工作?有人可以帮我解决这个问题吗? “.NET 3.5 sp1 是我正在使用的版本”

【问题讨论】:

    标签: jquery


    【解决方案1】:

    你应该看看这里 -Code Project Sortable Gridview using JQuery Tablesorter

    本质上,您需要使用Gridview的UseAccessibleHeader property,以便在HTML输出中输出一个thead标签。

    protected void Page_Load(object sender, EventArgs e)
    { 
    if (this.gridView.Rows.Count > 0)
    {
    gridView.UseAccessibleHeader = true;
    gridView.HeaderRow.TableSection = TableRowSection.TableHeader;
    gridView.FooterRow.TableSection = TableRowSection.TableFooter;
    }
    }
    

    如果使用带有 runat="server" 属性的 html 表而不是 asp.net 服务器控件,看起来好像没有简单的方法来防止 thead 标记不在 html 输出中呈现。您可以使用一些 JQuery 在文档就绪时将其插入到 DOM 中-

        //in script tags after JQuery and JQuery tablesorter src declarations
        $(function() 
        {
            $('#test').prepend(
            $('<thead></thead>').append($('#test tr:first').remove()) 
            );
    
            $("#test").tablesorter();
                //your table options
        });
    
    
    //your html and asp markup
    <table id="test" runat="server">
    <thead><tr><th>1</th><th>2</th><th>3</th></tr></thead>
    <tbody>  
    <tr><td>my data 1.1</td><td>this data 1.2</td><td>that data 1.3</td></tr>
    <tr><td>this data 2.1</td><td>that data 2.2</td><td>my data 2.3</td></tr>
    <tr><td>that data 3.1</td><td>my data 3.2</td><td>this data 3.3</td></tr>
    </tbody>
    </table> 
    

    输出这个,与tablesorter一起正常工作-

    <table id="test">
    <thead>
    <tr>
    <th class="header">1</th>
    <th class="header">2</th>
    <th class="header headerSortDown">3</th>
    </tr>
    </thead>
    <tbody>
    <tr>
    <td>this data 1.1</td>
    <td>that data 1.2</td>
    <td>my data 1.3</td>
    </tr>
    <tr>
    <td>my data 2.1</td>
    <td>this data 2.2</td>
    <td>that data 2.3</td>
    </tr>
    <tr>
    <td>that data 3.1</td>
    <td>my data 3.2</td>
    <td>this data 3.3</td>
    </tr>
    </tbody>
    </table>
    

    【讨论】:

    • 有没有办法在仍然使用 html 表的情况下做到这一点。我已经使用 html 表完成了很多事情。我不想重新开始。
    • 更新了我的答案以包含具有 runat="server" 属性的 html 表的解决方案
    • Russ cam 你能详细解释一下吗..它有效。但我想了解的是每个部分在做什么?:(#'test).prepend($('').append($('#test tr:first').remove()) 以及如果您只提到 thead,tbody 是如何插入的
    • tbody 标签从 ASP.NET 页面以 HTML 格式输出。理解 JQuery 代码的最好方法是由内而外地工作。因此, $('#test tr:first').remove() 从 ID="test" 的表中删除第一个 tr 标签(和包装的内容)。
    • 然后,第一个 tr 标记被附加到新创建的 thead 元素 $('') 中,该元素已被包装的元素预先添加(插入到内容之前)通过选择器('#test'),在这种情况下,就是我们的测试表。
    【解决方案2】:

    从这个开始……

    print("<table class='turnMeIntoTableSort'><tr><td>heading1</td><td>heading2</td></tr><tr><td>content1</td><td>content2</td></tr><tr><td>content3</td><td>content4</td></tr></table>");
    

    然后这样做:

    print("$(document).ready(){
             $('table.turnMeIntoTableSort > tr:first').wrap('<thead></thead>');
             $('table.turnMeIntoTableSort > tr:gt(1)').wrapAll('<tbody></tbody>');
    
             //now draw the tablesorter
             $('table.turnMeIntoTableSort').tablesorter();
           }");
    

    【讨论】:

    • 这看起来可能有效。但看起来可能是骗人的..我明天早上会尝试获取我的数据,我会给你一个更新
    猜你喜欢
    • 2010-09-23
    • 2011-04-24
    • 2014-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-11
    • 2015-02-20
    相关资源
    最近更新 更多