10

これは私のhtmlです:

<div id="my_box_one" class="head-div">
   <div>
       <div class="some_box">a</div>
       <div class="some_box">b</div>
    </div>
</div>

そのdiv( "。head-div")のクラスを使用して、親div( "#my_box_one")のIDを取得したい

$(document).ready(function(){

$(".some_box").click(function(){
   var abc = $(this).parentsUntil(".head-div").attr("id");
   // also tried $(this).parent(".head-div") -- same effect
   alert(abc); // Shows as Undefined
});   

});

私は次のことを行うことができ、それはうまくいくでしょうが、それは正しくないようです。

var abc = $(this).parent("div").parent("div").attr("id");
4

2 に答える 2

25

たとえば、次のように.closest( selector )を使用できます。

var abc = $(this).closest(".head-div").attr("id");

http://api.jquery.com/closest/

.parent( selector )は、要素の直接の親のみを選択します。

于 2011-04-30T12:20:10.160 に答える
5

parentsUntilセレクターによって一致するものまで、すべての親要素を取得します。一致した要素は含まれません。id介在する を取得しようとしていますがdiv、これは明らかに未定義です。

を使用する必要がありますclosest。これは、セレクターに一致する要素が見つかるまで DOM ツリーを上っていき、その要素のみを返します。

var abc = $(this).closest(".head-div").attr("id");

編集:速度を上げますが、マークアップを変更した場合の柔軟性を低下させるには、次のparentNodeプロパティを使用できます。

var abc = this.parentNode.parentNode.id;
于 2011-04-30T12:22:23.587 に答える