Javascript I';我正在整理数据。如何使用固定类放置第一个元素?
我正在用Javascript I';我正在整理数据。如何使用固定类放置第一个元素?,javascript,jquery,html,Javascript,Jquery,Html,我正在用jQuery/Javascript订购一些div:首先是一个属性,而不是另一个属性。 这是我的: 在本例中,您可以看到,首先是按内容的数据计数排序,而不是按内容的数据标题排序 我现在想做的是首先把选中的类放在上面的元素;另一个晚些时候 但每个“块”也必须按数据计数和数据标题排序。因此,在本例中,结果应为: Fabio (5) Edoardo (4) Luca (0) Paolo (8) Andrea (4) Marco (1) 如何在此处添加“按类排序?”要对主键和辅键进行排序,通常的
jQuery/Javascript
订购一些div
:首先是一个属性,而不是另一个属性。
这是我的:
在本例中,您可以看到,首先是按内容的数据计数
排序,而不是按内容的数据标题
排序
我现在想做的是首先把选中的类放在上面的元素;另一个晚些时候
但每个“块”也必须按数据计数
和数据标题
排序。因此,在本例中,结果应为:
Fabio (5)
Edoardo (4)
Luca (0)
Paolo (8)
Andrea (4)
Marco (1)
如何在此处添加“按类排序?”要对主键和辅键进行排序,通常的方法是在检测到主键不同时返回-1
或+1
,并且仅在主键相同时才移动到辅键。在您的案例中编辑您有三个键:是否在“类”中选择“已选”,计数和标题:
items.sort(function (a, b) {
// test for the "selected" class
var aSel = /\bselected\b/.test(a.className), bSel = /\bselected\b/.test(b.className);
if (aSel && !bSel) return -1;
if (bSel && !aSel) return 1;
// test the counts
var prim = +b.getAttribute('data-count') - +a.getAttribute('data-count');
if (prim) return prim;
// compare titles
var aTitle = a.getAttribute('data-title'), bTitle = b.getAttribute('data-title');
return aTitle < bTitle ? -1 :
aTitle > bTitle ? 1 :
0;
}).detach().appendTo($(type));
items.sort(函数(a,b){
//“选定”类的测试
var aSel=/\bselected\b/.test(a.className),bSel=/\bselected\b/.test(b.className);
如果(aSel&!bSel)返回-1;
如果(bSel&!aSel)返回1;
//测试计数
var prim=+b.getAttribute('data-count')-+a.getAttribute('data-count');
if(prim)返回prim;
//比较标题
var aTitle=a.getAttribute('data-title'),bTitle=b.getAttribute('data-title');
返回aTitlebTitle?1:
0;
}).detach().appendTo($(类型));
这样,如果一行的计数大于下一行的计数,就不必担心标题,所以我们甚至不进行比较。但如果计数相等,则标题比较确定排序
当然,这可以概括为您想要的任意多个键。首先比较hasClass()的结果。
:
(+
对于true
或false
,布尔值计算为1
或0
)
Order(“#parent”);
功能顺序(类型){
变量项=$(类型+'>.item');
项目.排序(功能(a,b){
return(+$(b).hasClass('selected')-+$(a).hasClass('selected'))||
(+b.getAttribute('data-count')-+a.getAttribute('data-count'))|
(a.getAttribute('data-title').localeCompare(b.getAttribute('data-title'));
}).appendTo($(type));
}
马可(1)
法比奥(5)
埃多尔多(4)
保罗(8)
卢卡(0)
安德里亚(4)
}这根本没有回答我的问题:O@markzzz哦,好的,你想要先有“selected”类的元素吗?我可以更新答案。@markzzz好的,更新了。请注意,对于标题比较,您现有的比较实际上并不正确。要比较字符串,必须明确检查每个字符串是否大于(或小于)另一个字符串。否则,这类人会做出奇怪的事情。在另一个答案中编辑或使用.localeCompare()
。最好使用.localeCompare()
!不知怎么的,我从来没有想到过。@Pointy我也经常忘记它。不知何故,这个名字让人觉得它像是一个晦涩难懂的角落案例方法,而不是你所排序的东西。
items.sort(function (a, b) {
// test for the "selected" class
var aSel = /\bselected\b/.test(a.className), bSel = /\bselected\b/.test(b.className);
if (aSel && !bSel) return -1;
if (bSel && !aSel) return 1;
// test the counts
var prim = +b.getAttribute('data-count') - +a.getAttribute('data-count');
if (prim) return prim;
// compare titles
var aTitle = a.getAttribute('data-title'), bTitle = b.getAttribute('data-title');
return aTitle < bTitle ? -1 :
aTitle > bTitle ? 1 :
0;
}).detach().appendTo($(type));
(+$(b).hasClass('selected') - +$(a).hasClass('selected'))
Order('#parent');
function Order(type) {
var items = $(type + ' > .item');
items.sort(function (a, b) {
return $(b).hasClass('selected') || a.getAttribute('data-count').toLowerCase().localeCompare(b.getAttribute('data-count').toLowerCase())
|| a.getAttribute('data-title').toLowerCase().localeCompare(b.getAttribute('data-title').toLowerCase());
}).detach().appendTo($(type));