我试图找出最好的方法来创建基于公共属性的元素组。我可以明确地将它们逐一比较,最终得出正确的结果,但我相信还有更好的方法可以去。jQuery - 根据属性值创建元素组
所以,我基本上分配了4种类型的属性到我的div:position top,position left,width and position bottom。我有4个div,我将它们分配给它们(但未来4个可能会更大)。
zones = 4;
for (x = 1; x<=zones ; x++)
{
$('#zone'+x).attr('data-top',Math.floor($('#zone'+x).position().top));
$('#zone'+x).attr('data-bottom',Math.floor($('#zone'+x).position().top) + $('#zone'+x).height());
$('#zone'+x).attr('data-left',Math.floor($('#zone'+x).position().left));
$('#zone'+x).attr('data-width',$('#zone'+x).width());
}
有了这个,我结束了这样的事情:
<div id="zone2" data-top="976" data-bottom="2579" data-left="131" data-width="660">...</div>
现在我面临的挑战是如何创建一个基于有共同的数据值最高的所有div元素组。简单的解决方案是将所有数据进行比较,而只有4个div来比较它是可管理的,但如果div数量增长,它很快就会变得一团糟。
问题1:如何为一个公共属性值分配一个组?
我试图在最后得到的是:
<div id="zone2" data-top="976" data-bottom="2579" data-left="131" data-width="660" data-group="1">...</div>
和数据组将等于1为具有相同的数据顶值的所有div。如果有多个组共享公用数据最高值,那么我需要增加数据组。我最终可能会遇到这样的问题:
<div id="zone1" data-top="976" data-bottom="2379" data-left="131" data-width="660" data-group="1">...</div>
<div id="zone2" data-top="976" data-bottom="2579" data-left="131" data-width="660" data-group="1">...</div>
<div id="zone3" data-top="1500" data-bottom="2479" data-left="131" data-width="660" data-group="2">...</div>
<div id="zone3" data-top="1500" data-bottom="3579" data-left="131" data-width="660" data-group="2">...</div>
问题2:如何在组内找到最大值?
随着组正确设置,我应该如何继续找到最大数据最低值?在上面的例子中,data-group = 1的最大数据最小值为2579,数据组= 2的最大数据值为3579 0
我想到.each和.each比较值中的值,它在最后工作但代码非常长。
在标记中div是否具有相同的'data-top'值总是连续的? – Jamiec
Hello Jamiec,是的,常见的数据顶端意味着它们确实是连续的。 – Laurent