这是我到目前为止工作的JSFiddle:http://jsfiddle.net/FmBFt/1/我的问题是调整演示代码来做我想做的事情。同位素文档对像我这样的noob编码器没那么有用。
解释我的需求
我正在使用ISOTOPE并且有6个类别。每个类别中都有任意数量的框。所以丁香类可能有3个盒子,绿色类别可能有8个盒子,依此类推。我有一个每个类别的链接列表。单击类别名称(例如:淡紫色类别)时,我需要具有顶部淡紫色边框的所有框按其类名“l”排序并移至顶部。然后,我希望按照添加日期的顺序对这些淡紫色框进行排序,首先显示最近的框。我希望将排序功能应用于所有类别,但实际上并不知道如何做到这一点。
我注意到你可以按“日期类别”进行排序,但所有这一切都将所有类别组合在一起,它不会像我需要的那样将某个类别移到顶部。
我不知道如何调整http://jsfiddle.net/FmBFt/1/来做我想做的事情,任何人都可以帮助我吗?
编辑:到目前为止,我有一个答案让我感到困惑,但我很确定我的问题在于我的JS中的getSortData函数: getSortData : {
blogs : function( $elem ) {
return $elem.find('.blogs');
},
symbol : function( $elem ) {
return $elem.attr('data-symbol');
},
category : function( $elem ) {
return $elem.attr('data-category');
},
number : function( $elem ) {
return parseInt( $elem.find('.number').text(), 10 );
},
weight : function( $elem ) {
return parseFloat( $elem.find('.weight').text().replace( /[\(\)]/g, '') );
},
name : function ( $elem ) {
return $elem.find('.name').text();
}
}
上面代码中的类别调用看起来可以做到,但我只需要找出如何进行调整,此时它所做的就是将每个类别组合在一起,但我需要一次组合一个...任何人
答案 0 :(得分:1)
我正在寻找另一个答案,同时寻找这个确切问题的解决方案。就我而言,按平台排序游戏。他得到了令人难以置信的技术和深度,我可以看到你迷路了。
这是我使用的getSortData中的一个元素:
flash : function ( $elem ) {
if ($elem.find('.platform').text() == "Flash") {
return $elem.find('.modes').text();
} else {
return "Z";
}
}
我在这里做的是检查你原本只返回的价值是否是我想要的。 “闪”。如果是的话,那就完全没问题。你也可以给它0的值。然后,如果它的任何其他你返回一个值'MORE'而不是你想要的值。
所以在我的情况下,我的第一个值是Flash,然后所有其他值都设置为Z.如果你想要,你甚至可以进行多次检查。 “if elseif elseif”是为了将多个事物排序到顶部。
希望这有帮助。
答案 1 :(得分:-1)
这里涉及两个不同的部分。首先,我们有自己的排序。这是由同位素处理,没有你的业务。你需要的是第二部分:比较器。
比较器是由您定义的函数,它返回各种“键”。同位素将比较所有键并以自然方式对它们进行排序(文本按ascii排序:'1', '10', '100', '11', '2'
),数字按值排序(1, 2, 10, 11, 100
)。
这就是getSortData()
的作用:它返回同位素可用于创建键的几个函数。排序时,您必须指定要使用的功能。如果您指定foo
,那么同位素将为每个要排序的节点调用getSortData().foo(x)
,其中x
将替换为每个节点。
创建此密钥列表后,同位素将对密钥进行排序(并使用此信息对节点本身进行排序)。
那么你需要一个好的密钥生成器。我的建议是将日期转换为毫秒,将该数字转换为字符串,并将其左括约为0.请参阅左边填充的答案:How can I pad a value with leading zeros?
如果该类为“l”,则前缀此字符串为“1”,否则为“0”:
return (cls == 'l' ? '0' : '1') + zeroFill( dateInMillis, 16 );
这将首先使用正确的类排序框('0'小于'1'),然后按日期对每种类型的框进行排序。
或者,您可以为每个框提供相同密钥的错误类(因此它们不会更改顺序):
return (cls == 'l' ? zeroFill( dateInMillis, 16 ) : 'xxx');