Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/374.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript I';我正在整理数据。如何使用固定类放置第一个元素?_Javascript_Jquery_Html - Fatal编程技术网

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));