使用jQuery对HTML表行进行自定义排序

使用jQuery对HTML表行进行自定义排序,jquery,html,sorting,html-table,Jquery,Html,Sorting,Html Table,我正在对code/SKU列上的表行进行排序代码/SKU列可能包含也可能不包含作为我的分隔符的-(破折号)。-之后的3位代码是我的产品机架号,前缀在a-Z之间。我正在尝试根据机架号按升序对产品进行排序,而不考虑前缀。如果机架编号缺失,则应在顶部列出这些产品 例如,如果输入code/SKU列包含: RIN65631-A24 PNT64705 CPC31378-D06 然后,输出code/SKU列应按以下顺序排序: PNT64705 CPC31378-D06 RIN65631-A24 这是我的 如

我正在对
code/SKU
列上的表行进行排序<代码>代码/SKU列可能包含也可能不包含作为我的分隔符的
-
(破折号)。
-
之后的3位代码是我的产品机架号,前缀在a-Z之间。我正在尝试根据机架号
按升序对产品进行排序,而不考虑前缀。如果机架编号缺失,则应在顶部列出这些产品

例如,如果输入
code/SKU
列包含:

RIN65631-A24
PNT64705
CPC31378-D06
然后,输出
code/SKU列
应按以下顺序排序:

PNT64705
CPC31378-D06
RIN65631-A24
这是我的

如上所述,我获得了所需的输出,但如果您查看我的JSFIDLE,您将看到我正在使用多个调用
$(this).find()
函数从DOM中检索IMO不需要的特定元素。可能有更好的方法可以避免冗余的find()调用并获得相同的输出。有人能在这方面帮助我吗

编辑:

注意:应该对DOM就绪事件执行排序。

使用jquery插件:

 $('td.sku').sortContent({asc:true,
                         target:function(e){
                           return $(e).parent();
                         },helper:function(e){
                            var html=$(e).html().split('-'); 
                            if(html.length===2){return html[1]}
                             else {return ''}    
                          }
 });

解释

  • 目标callbak:您根据
    td
    元素进行排序,但是,
    tr
    应该进行排序。因此目标是
    tr
    ,它是
    td
    元素的父元素

  • 助手:标识要排序的内容

更新:

要仅对数字字符进行排序,助手回调应如下所示:

var myhelper=function(e){
   var html=$(e).html().split('-'); 
    if(html.length===2){return 'b'+html[1].numeric()}
    else {return 'a'+html[0].numeric()}

};

请参见使用KnockoutJS。您可以从盒子中取出该功能

$(document).ready(function(){
var th = jQuery('.shortid'),
    inverse = false;

th.click(function(){

    var header = $(this),
        index = header.index();

    header
        .closest('.right-contacts-details')
        .find('.shorting')
        .filter(function(){
            return $(this).index() === index;
        })
        .sort(function(a, b){

            a = $(a).text();
            b = $(b).text();

            return (
                isNaN(a) || isNaN(b) ?
                    a > b : +a > +b
                ) ?
                    inverse ? -1 : 1 :
                    inverse ? 1 : -1;

        }, function(){
            return this.parentNode;
        });

    inverse = !inverse;

});

}))

您是否考虑过使用类似的方法进行排序?您还可以截取该特定列上的排序事件并执行其他操作。@Moby'sStuntDouble感谢您的建议,但datatables.net插件将按“字母数字”对元素进行排序
code/SKU
的值,而要求仅对代码/SKU中机架编号的数字部分进行自定义排序。首先,我不希望页面上的任何“排序”按钮触发排序。数据已经加载到DOM中,我希望使用jQuery对其进行排序。它是根据我的机架号的“字母数字”值对元素进行排序,而要求是仅根据该机架号的数字部分进行排序。请检查我在问题中的输入和输出。这正是我想要的。谢谢!!