JQuery получить идентификатор элемента путем поиска его по классу

Это мой 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("#my_box_one"), используя класс этого div(". Head-div")

$(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");

2 ответа

Решение

Вы можете использовать .closest(селектор), например:

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

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

.parent (селектор) выбирает только непосредственного родителя элемента.

parentsUntil получает все родительские элементы, пока тот не соответствует селектору. Он не включает соответствующий элемент. Вы пытаетесь получить id из вмешательства div, что явно не определено.

Вам нужно использовать closest, который идет вверх по дереву DOM, пока не найдет элемент, соответствующий селектору, а затем вернет только этот элемент:

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

Изменить: для дополнительной скорости, но меньшей гибкости в случае изменения разметки, вы можете использовать parentNode имущество:

var abc = this.parentNode.parentNode.id;
Другие вопросы по тегам