使用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对其进行排序。它是根据我的机架号的“字母数字”值对元素进行排序,而要求是仅根据该机架号的数字部分进行排序。请检查我在问题中的输入和输出。这正是我想要的。谢谢!!