2017-09-07 5 views
2

私は、追加のdiv要素が異なる値のデータ例を添加することができるこのような構成に DIV要素ATTR同じデータATTRのdivで別々のインデックスを取得

<div data-example="1"></div> 
<div data-example="2"></div> 
<div data-example="1"></div> 
<div data-example="3"></div> 
<div data-example="2"></div> 
<div data-example="2"></div> 
<div data-example="4"></div> 

以下のような構造を有します4-5-6- 9など

divsのインデックスを同じdata-attrで取得し、html要素として追加したいと考えています。例えば

<div data-example="1">Index is 0 for data 1</div> 
<div data-example="2">Index is 0 for data 2</div> 
<div data-example="1">Index is 1 for data 1</div> 
<div data-example="3">Index is 0 for data 3</div> 
<div data-example="2">Index is 1 for data 2</div> 
<div data-example="2">Index is 2 for data 2</div> 
<div data-example="4">Index is 0 for data 4</div> 

について詳細について

指数は、これは1つの値とデータ例を有するwhch最初のdivであり、これは、データ、例えば値1を有するDIVのうち最初のdivであるデータ1は0でありますそのインデックスは0です。data-example = 2の2番目のdivインデックスを取得します。

jqueryでインデックスを動的に取得するにはどうすればよいですか。

+0

質問が不明です。なぜ 'Index 2はデータ2 '、' Indexはデータ3'になりますか?その背後にあるロジック> –

+0

divはデータサンプル値のためにグループ化する必要があるためです。彼らはグループ化されて、彼らはそのインデックスを取得します。 –

+0

私は 'Index is x for data y'は'これはyを見たx番目の時間です 'という意味で正しいですか? – jrtapsell

答えて

1

あなたは以下のようにjQueryのprevAll()を使用する必要があります: -

$('div').each(function(){ 
 
    var attr = $(this).attr('data-example'); 
 
    if (typeof attr !== typeof undefined && attr !== false) { 
 
    var counter = $(this).prevAll('div[data-example='+$(this).data('example')+']').length; 
 
    $(this).text("Index is "+counter+" for data "+$(this).data('example')); 
 
    } 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 

 
<div data-example="1"></div> 
 
<div data-example="2"></div> 
 
<div data-example="1"></div> 
 
<div data-example="3"></div> 
 
<div data-example="2"></div> 
 
<div data-example="2"></div> 
 
<div data-example="4"></div> 
 

 
<div>Unchanged</div>

+0

あなたの100%正解ありがとう@ Die –

+0

@私はOPのHTMLに基づいて解決策を出しました。パニックにはなりません。しかし、私もそれを更新することを心配しないでください。しばらくお待ちください –

1

このためにフィルタ機能を使用できます。

var allItems = $("div").filter("[data-example]"); 
 

 
var mV = 0; 
 
if (allItems.length > 0) { 
 
    $(allItems).each(function(k, v) { 
 
    var val = $(this).attr("data-example"); 
 
    if (mV < val) mV = val; 
 
    }) 
 

 
    for (var ic = 1; ic <= mV; ic++) { 
 
    $(allItems).filter("[data-example='" + ic + "']").each(function(key, value) { 
 
     //console.log(key); // this is index 
 
     //Here updated the div text correctly. 
 
     $($(this)[0]).html("Index is " + key + " data " + ic); 
 
    }); 
 
    } 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div data-example="1">Index is 0 for data 1</div> 
 
<div data-example="2">Index is 0 for data 2</div> 
 
<div data-example="1">Index is 1 for data 1</div> 
 
<div data-example="3">Index is 5 for data 3</div> 
 
<div data-example="2">Index is 1 for data 2</div> 
 
<div data-example="2">Index is 0 for data 2</div> 
 
<div data-example="4">Index is 0 for data 4</div>

参考:https://stackoverflow.com/a/2903048/7974050

+0

ありがとうございます。返信ありがとうございますが、私は同じデータを持つdivのインデックスを必要としています - 例の値と最初のデータ - 例1はインデックス0を取得します。最初のdiv with data-example 2はインデックス0を取得します.divは2番目のdivで、例2はインデックス1を取得します。 –

+0

回答が更新されました。属性値とともにフィルタを使用することもできます。 – Amit

+0

はい、これは動作するため、解決策になる可能性がありますが、icの値をあらかじめ定義せずに解決策を見つけようとします。おそらくデータの値の例が10以上でicの値が事前定義されている必要があります。 。そして、icの値をあらかじめ定義しておけば、各関数は10回実行されますが、上記の例では4回で十分です。もし私がより良い答えを得ることができないなら、私はあなたの答えを正しいものとして選ぶでしょう。もちろん私が解決策を見つけることができない場合は、あなたに感謝します。 –

関連する問題