2017-01-31 2 views
1

В данный момент я использую этотJQuery ярлык, чтобы выбрать братьев и сестер родителей

$('body').on('click', '#edit_card .ui.menu a.item', function() { 
    tab = $(this).closest('.ui.tab.active'); 
    updateRelationshipsContentCard(tab); 
}); 

Чтобы попытаться выбрать активную вкладку при нажатии на тег, но он ничего не найдя, где моя ошибка?

<div class="ui pointing secondary menu"> 
    <a class="item" data-tab="1">1</a> 
    <a class="item active" data-tab="2">Pessoas</a> <- Clicked this 
</div> 
<div class="ui tab" data-tab="1"> 
    <div class="ui basic segment"> 
    </div> 
</div> 
<div class="ui tab active" data-tab="2"> <- Need to select this 
    <div class="ui basic segment"> 
    </div> 
</div> 

Я знаю, что с помощью

tab = $(this).parent().parent().children('.ui.tab.active'); 

работал, но я не могу понять, почему с помощью closest не

+2

'.closest()' производит поиск в DOM и ссылку вы щелкнули не имеет предка с классы '.ui.tab.active'. У него есть родительский элемент с 'ui.pointing.secondary.menu', хотя – j08691

+0

У вас нет' '' '' '' '' ''. 'ближайший' будет искать только родителей. –

ответ

1

.closest() method будет пытаться выбрать любой предок элемент, соответствующий селектор, который предоставлен. Другими словами, он будет перемещаться по дереву DOM и искать предка или родительский элемент, который соответствует предоставленному селектору.

Это не работает в вашем случае, потому что .ui.tab.active не является предком щелкнутого элемента .item.

Если вы хотите использовать метод .closest(), вы можете использовать его, чтобы выбрать ближайший .ui.menu элемент, а затем оттуда выбрать родственный .ui.tab.active элемент:

$(this).closest('.ui.menu').siblings('.ui.tab.active') 

Основываясь на фрагменте кода, вы, вероятно, также выбрать ближайший #edit_card предка элемент, а затем использовать .find() для выбора активной вкладки:

$(this).closest('#edit_card').find('.ui.tab.active') 

..or поскольку .ui.menu элемент объявления Прям ая родитель, вы могли бы просто использовать .parent() и .siblings() методы вместе (предполагая, что разметка не изменяется):

$(this).parent().siblings('.ui.tab.active') 
+0

Так что ближайший подобен повторенному родительскому(), пока он не найдет селектор или не достигнет тела? – Mojimi

+1

@Mojimi - Да, в значительной степени, но если он не найдет ни одного элемента (-ов), то ничего не будет выбрано. [Документация по методу '.closest()') (http://api.jquery.com/closest/) охватывает его и детализирует разницу между '.closest()' /'.parents() '. –

Смежные вопросы