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 回答