我試圖找出最好的方法來創建基於公共屬性的元素組。我可以明確地將它們逐一比較,最終得出正確的結果,但我相信還有更好的方法可以去。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