共通のプロパティに基づいて要素のグループを作成する最善の方法を見つけようとしています。私は明らかにそれらを1つずつ比較して正しい結果に終わることができますが、より良い方法があると確信しています。jQuery - 属性値に基づいて要素のグループを作成する
したがって、私は基本的にdiv、position top、position left、widthおよびposition bottomの4種類の属性を割り当てます。私はそれらを割り当てる4つのdivsを持っています(しかし、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>
とデータ・グループは、同じデータ・トップ値を持つすべてのdivのために1に等しくなります。共通のデータトップ値を共有する複数のグループがある場合は、データグループを増分する必要があります。私はこのようなもので終わることができます:
<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のデータボトムの最大値は、データグループ= 2の場合、2579と3579です。
私はそれぞれの.eachを使用すると考えていましたが、コードは非常に長いです。
同じ 'data-top'値を持つdivはマークアップ内で常にシーケンシャルですか? – Jamiec
こんにちはJamiec、はい、共通のデータトップは、実際に連続していることを意味します。 – Laurent