2015-05-17 2 views
0

Обновленный вопрос с реальным кодом: Я этоВыберите родитель с детьми, который имеет определенный класс

jQuery("dt").has("a.is-expanded").addClass("is-expanded"); 

и

<dt><a href="#accordion1" class="accordion-title accordionTitle js-accordionTrigger is-collapsed is-expanded" aria-expanded="true">Our services</a></dt> 

Я ожидал, чтобы добавить класс является -расширен к dt, так как он содержит a с классом is-expand. Но этого не происходит, и я не понимаю, почему? Если я просто положил, то это сработает, но не если я поместил a.is-expand. Что я делаю не так?

+0

Использовать hasClass() –

+1

Вы используете аккордеон jQuery UI? Когда выполняется код? – Amit

+0

@ Интересный вопрос Амита Интересен вопрос - может ли код выше работать до того, как будет добавлен класс 'is-expand'? Это объясняет, почему это работает без 'is-extended', но не с этим – CupawnTae

ответ

2

Я подозреваю, что ваш код JS в настоящее время выполняется перед is-expanded классом установленный на элементе a (возможно, нагрузка на корпус).

Кроме того, вы можете оптимизировать селектор:

jQuery("dt:has(a.is-expanded)")` 

Это означает, что Jquery только возвращает список с теми dt о том, что на самом деле имеют соответствующие детей, что является быстрее задачей, чем возвращение всех dt 'ю.ш. (особенно если их много), а затем фильтрацию этого списка с помощью другого вызова выбора.

+0

Амит поймал, что случилось! @CupawnTae также должен получить кредит за обширную помощь. – pastic

1

квалифицируют a в .has() с class selector:

jQuery("dt").has("a.selected").addClass("red"); 
+0

Это то, что я изначально пробовал, но безуспешно. Мой dt не обновляется новым классом, когда я пишу a.selected, только когда пишу a. Но это не то, что я хочу. Это мой фактический HTML, расширенный - это то, что я хочу ударить (я написал выше для простоты): '

' – pastic

+0

Класс все еще добавлен, поэтому, возможно, есть что-то еще, что мешает ему –

1

Вы можете включить selected класс в селекторе has().

Для запуска кода при изменении гармошки, прослушивание create и activate событий на гармони: https://api.jqueryui.com/accordion/#events

jQuery("dt").has("a.is-expanded").addClass("is-expanded");
.is-expanded {background:red} 
 
.is-expanded a {color: yellow}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<dt><a href="#accordion1" class="accordion-title accordionTitle js-accordionTrigger is-collapsed is-expanded" aria-expanded="true">Our services</a></dt> 
 
<dt><a href="#accordion1" class="accordion-title accordionTitle js-accordionTrigger is-collapsed" aria-expanded="true">Other</a></dt>

+0

Вот что Сначала я пытался, но безуспешно. Мой dt не обновляется новым классом, когда я пишу a.selected, только когда пишу a. Но это не то, что я хочу. Это мой фактический HTML, is-extended - это то, что я хочу ударить (я написал выбранное выше для простоты): '

' – pastic

+1

Вы должны поместить свой фактический код, как HTML, так и JS в свой вопрос, - как вы можете видеть, вы запускаете мой фрагмент, он * работает *, поэтому должно быть что-то еще, имеющее эффект. – CupawnTae

+0

Я обновил свой фрагмент с вашим фактическим HTML-заметкой о том, что установка 'color' на' dt' не изменит цвет ссылки (поэтому я изменил ее на «фон» для демонстрационных целей) - возможно это ваша проблема? – CupawnTae

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