2013-06-17 2 views
0

Я пытаюсь выбрать DIV с идентификатором = B при выборе любых флажковJQuery получить ближе скрытый DIV

<div id="a"><div style="display:none;" id="B"></div></div> 
<ul> 
<li><input type='checkbox'></li> 
<li><input type='checkbox'></li> 
<li><input type='checkbox'></li> 
</ul> 

Следующие возвращает неопределенное значение;

$(this).closest("div:hidden").attr("id") 

Любая помощь?

+0

попробуйте загрязнен: '$ (это) .closest ("DIV [стиль = 'дисплей: нет;']") атр ("ID")' – Cherniv

+1

'$ (это)', что есть. это здесь? – Jai

+0

'div' с идентификатором' b' является дочерним узлом этого div. Возможно, вам придется это сделать. '$ (this) .closest ('div'). find ('div: hidden'). attr ('id')' –

ответ

6

Это потому, что .closest путешествуйте по дереву, что хотите; чтобы получить уль элемент, а затем получить div:hiddensibling:

$(this).closest("ul").siblings("div:hidden").attr("id"); 

Это основано на том this относится к ребенку, внуку, великий внук, N-потомок элемента ул.


As T.J. Crowder подчеркивает, что это будет работать только если DIV является родственным ул, а не дочерний узел одноуровневый: Этот фрагмент кода выглядит для дочерних узлов братий и сестер:

$(this).closest("ul").siblings().find("div:hidden").attr("id"); 
+2

Закрыть, но не совсем, это не родной брат 'ul'. Вам понадобится '$ (this) .closest (« ul »). Siblings(). Children (« div: hidden »). Attr (« id »);' который не похож на хорошую идею, структура вероятно, нуждается в изменении. –

+0

Это дочерний узел div, где 'id =" a "' над 'ul' –

+0

Хорошо, я вижу, что пошло не так. – andlrc

0

Вы можете использовать

$('ul').change(function(){ 
    $('#B').show(); 
}); 

я предпочел бы поставить идентификатор на тег Тхо UL и относятся к этому ID

<div id="a"> 
    <div style="display:none;" id="B"></div> 
</div> 
<ul id="theUl"> 
    <li><input type='checkbox' /></li> 
    <li><input type='checkbox' /></li> 
    <li><input type='checkbox' /></li> 
</ul> 


$('#theUl').change(function(){ 
     $('#B').show(); 
}); 
0

Что вам нужно сделать, это пойти к ul, вернуться к предыдущему div, а затем вплоть до его скрытого ребенка. Итак:

var id = $(this).closest('ul').prev().children('div:hidden').attr(id); 
Смежные вопросы