0

div属性を持つ最初の親を見つけようとしていidます。

セレクターは'div .img'であり、ネストされたdiv内にある可能性があります

<div id='div1'>

 <div id='div2'> first nested parent div

       <div>second div
            <img class='img' src='test.jpg'/> 
       </div>   

 </div>

 <div>  //this div has no id
      <div>another div
           <img class='img' src='cookie.jpg'/> 
      </div>   
 <div>

</div>

セレクター

$('div.img')

出力する必要があります

div2 
div1

div2 shows first becasue div2 has id attribute and it is the parent of the test.img
div1 shows next becasue cookie is the second image and the first parent div that has div1 id

私が試してみました

if($('div .img').find('.img').closest('div').attr('id')){
   console.log($('div.img').closest('div').attr('id'))
}

しかし、それは機能しません。とにかくこれを行うことはありますか?本当にありがとう!

4

4 に答える 4

3

私はお勧めします:

var divsWithIDs = $('img.img').parents('div[id]').get();
console.log(divsWithIDs);

JS フィドルのデモ

このアプローチでは、img.img要素を検索してから、それらの画像の親を調べて、属性divを持つ要素を見つけます。idこのget()メソッドは、選択範囲を配列に変換します。

参考文献:

于 2013-02-04T23:00:17.450 に答える
1

次を使用できます。

var $divsWithIds = $('img.img').closest('div[id]');

closestこれは、の代わりにを使用することを除いて、@DavidThomasによる回答と同じですparents。「.img」クラスを持つすべての「img」要素を選択してから、それぞれに最も近い親を取得します。

次の状況では、usingparents()には「div1」と「div2」の両方が含まれますが、usingは「div2」closest()のみを返します。

<div id='div1'>
    <div id='div2'>
       <div>
            <img id="img1" class='img' src='test.jpg'/> 
       </div>   
    </div>
</div>

 <div>
       <img id="img2" class='img' src='cookie.jpg'/> 
 <div>
于 2013-02-04T23:57:46.497 に答える
1
var IamadivparentandhaveanId=$('div').find('img').closest('div[id]');

またはクラスを使用して:

$('div').find('img.img').closest('div[id]');

また

$('.img').closest('div[id]');

コメントごとに編集して、それらを一度だけ見つけるための使用を明確にします。

$('img.img').each(function(){
   $(this).closest('div[id]');
});// or use .filter if that is perferred
于 2013-02-04T23:00:05.290 に答える
0

それぞれjQueryを使用して、親を反復処理できます。

$('div img').each(function (a, b) {
    var x = $(b).parent();
    while (x && !x.attr('id')) {
        x = x.parent();
    }
    console.log(x.attr('id'));
});
于 2013-02-04T23:06:17.730 に答える