5

同じクラスの要素がたくさんあります。これらの要素は、属性「 data-xxx」によってグループに分けられます。

<div class="myclass" data-n="group1"></div>
<div class="myclass" data-n="group1"></div>
<div class="myclass" data-n="group1"></div>
.... 
<div class="myclass" data-n="group2"></div>
<div class="myclass" data-n="group2"></div>
...
<div class="myclass" data-n="group3"></div>
...
...

このようなものを使用して、各アイテムに対して機能を実行する方法はありますが、各グループで 1 回だけですか?

$('.myclass').each(function(){

/// My function

});
4

4 に答える 4

3

作業例: http://jsfiddle.net/5sKqU/1/

$(document).ready(function() {
    var group = {}; //an object that we're going to use as a hash  
    $('.myclass').each(function(){ 
        if (group[$(this).attr('data-n')] != true) {
            group[$(this).attr('data-n')] = true;

            //do something here once per each group
            alert('Group: '+ $(this).attr('data-n'));
        }
    }); 
});

これは、ページの読み込み時に 1 回だけ実行する必要があると想定しています。要件について詳しく教えていただければ、どのような変更が必要になるかをご案内できます。

于 2012-12-29T01:48:58.743 に答える
1

このようなものかもしれません:

var groups = {};
$('.myclass').each(function(i, el) {
    var n = $(el).data('n');
    if(!groups[n]) {
        groups[n] = $();
    }
    groups[n] = groups[n].add(el);
});

//At this point the object `groups` has one property per group, 
//each value being a jquery collection comprising members of the group.

//Now the world's your oyster. You can loop through the groups 
//with full access to each group's members if necessary.
$.each(groups, function(groupName, jq) {
    //my function
});
于 2012-12-29T02:07:59.850 に答える
1

最初の要素を処理した後、すべてのグループ要素に特定の HTML 属性を設定できます。その後、その属性の値を確認できます。

$('.myclass').each(function(){

  if($(this).attr("processed")!="true") {
      // process...
      $("[data-n=" + $(this).attr("data-n")).attr("processed", "true");
  } else {
     // skip, or do something else with the element
  }

});
于 2012-12-29T03:20:02.067 に答える
0

次のように、jQuery 属性セレクターを使用して各グループを選択できます。

$( '.myclass[data-n="groupX"]' );

関数を各グループの 1 つの要素にのみ適用することを意味したかどうかはわかりませんが、そうであれば、それぞれの最初の要素のみが得られます。

$( '.myclass[data-n="groupX"]' ).first();

グループに 1 から N までのラベルを付けると、結果のセットに何かがあるかどうかを確認して、すべてのグループをいつループしたかを判断できます。

于 2012-12-29T01:51:02.187 に答える