2012-03-12 34 views
2

这是一个JSFiddle到我到目前为止工作:http://jsfiddle.net/FmBFt/1/我的问题是适应演示代码做我想做的事情。同位素文档对于像我这样的noob编码器没有帮助。同位素 - 分拣元素。首先由这个,然后由

为了解释什么,我需要

我使用ISOTOPE,并有6个类别。每个类别都会有任意数量的框。所以丁香类可能有3个盒子,绿色类别可能有8个盒子等等。我有一个链接到每个类别的列表。当点击一个类别名称(例如:淡紫色类别)时,我需要所有具有顶部淡紫色边框的盒子按类名称“l”排序并移动到顶部。然后,我希望这些淡紫色的盒子按照添加日期的顺序进行排序,最先显示最近的盒子。我希望将排序功能应用于所有类别,但实际上并不知道如何去做。

我注意到你可以按照“日期类别”进行排序,但是所有的功能是将所有类别组合在一起,它不会像我需要的那样将某个类别移动到顶部。

我还没有线索如何适应http://jsfiddle.net/FmBFt/1/做我想做的事,任何人都可以帮我吗?

编辑:嗯,我有一个答案至今刚刚混淆了地狱了我,但我敢肯定我的问题在于getSortData功能我JS内:

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

类别呼叫上面的代码看起来好像可以做到,但我只需要找出如何调整,目前它所做的就是将每个类别组合在一起,但我需要一次一个组合......任何人都可以?

回答

-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'); 
+0

感谢您的详细解答,但不幸的是,其中一些丢失在我身上!我对JS毫无用处。我是否将您的Zerofilled解决方案集成到getSortData函数中?我最终的计划是将其整合到Wordpress中,其中每个框代表一个帖子。我使用的日期类是抓取帖子日期,Zerofilled仍然可以使用这个日期吗?谢谢你的帮助! – egr103 2012-03-12 11:55:15

+0

您需要将日期字符串转换为排序良好的东西。这意味着您需要将日期字符串转换为“yyyyMMdd”,因为它们在用作键时可以正确排序。 – 2012-03-12 12:51:27

+0

我还会使用dateInMillis吗?我将如何转换字符串? – egr103 2012-03-12 13:34:30

1

我一直在寻找其他的答案,同时寻找适合这个确切的解决方案问题。就我而言,按游戏平台进行排序。他获得了令人难以置信的技术和深度,我可以看到你是如何迷路的。

下面是来自getSortData一个元素,我用:

flash : function ($elem) { 
    if ($elem.find('.platform').text() == "Flash") { 
     return $elem.find('.modes').text(); 
    } else { 
     return "Z"; 
    } 
} 

什么我在这里做的是检查,看看,否则你将刚刚返回的值是什么,我想即。 “闪”。如果是这样,它会很好地返回。你也可以给它0的值。然后,如果其他任何东西你返回的值比想要的值“更多”。

所以在我的情况,我的第一个值是闪存,然后如果你想你甚至可以有多个检查所有其他值都设置为Z.。 “如果elseif elseif”为了将多个事物排序到顶端。

希望这会有所帮助。