JQuery UI аккордеон: открыть вкладку на "текущей" странице
Добавлен JQuery accordian на сайт WordPress для отображения архивных сообщений. Текущее отображаемое сообщение имеет свой элемент списка, идентифицируемый class="current-article". Каждая "вкладка" аккордеона - это либо Месяц (на текущий год), либо Год.
Я скомпилировал код JQuery, который успешно открывает вкладку текущей статьи о загрузке страницы. Однако возникают две ошибки: 1) Первая вкладка (которая обычно является открытой по умолчанию) не активируется, пока не будет нажата и открыта другая вкладка, и 2) вкладка, которую я "принудительно" открыл с помощью своего кода, не будет закрыта пока он не будет нажат снова после того, как другие были нажаты.
Вот разметка:
<div id="accordion">
<h3 tabindex="-1" aria-selected="false" aria-controls="ui-accordion-accordion-panel-0" id="ui-accordion-accordion-header-0" role="tab" class="ui-accordion-header ui-helper-reset ui-state-default ui-accordion-icons ui-corner-all"><span class="ui-accordion-header-icon ui-icon ui-icon-triangle-1-s"></span>June</h3>
<div aria-hidden="true" aria-expanded="false" role="tabpanel" aria-labelledby="ui-accordion-accordion-header-0" id="ui-accordion-accordion-panel-0" style="display: none;" class="ui-accordion-content ui-helper-reset ui-widget-content ui-corner-bottom">
<ul>
<li><a href="http://linkaddress.co.uk" rel="bookmark" title="Article One">Article One</a></li>
<li><a href="http://linkaddress.co.uk" rel="bookmark" title="Article Two">Article Two</a></li>
</ul>
</div>
<h3 tabindex="0" aria-selected="true" aria-controls="ui-accordion-accordion-panel-1" id="ui-accordion-accordion-header-1" role="tab" class="ui-accordion-header ui-helper-reset ui-state-default ui-accordion-icons ui-accordion-header-active ui-state-active ui-corner-top"><span class="ui-accordion-header-icon ui-icon ui-icon-triangle-1-e"></span>May</h3>
<div aria-hidden="false" aria-expanded="true" role="tabpanel" aria-labelledby="ui-accordion-accordion-header-1" id="ui-accordion-accordion-panel-1" style="display: block;" class="ui-accordion-content ui-helper-reset ui-widget-content ui-corner-bottom ui-accordion-content-active">
<ul>
<li class="current current-article"><a href="http://linkaddress.co.uk" rel="bookmark" title="Article Three">Article Three</a></li>
</ul>
</div>
<h3 tabindex="-1" aria-selected="false" aria-controls="ui-accordion-accordion-panel-2" id="ui-accordion-accordion-header-2" role="tab" class="ui-accordion-header ui-helper-reset ui-state-default ui-corner-all ui-accordion-icons"><span class="ui-accordion-header-icon ui-icon ui-icon-triangle-1-e"></span>February</h3>
<div aria-hidden="true" aria-expanded="false" role="tabpanel" aria-labelledby="ui-accordion-accordion-header-2" id="ui-accordion-accordion-panel-2" style="display: none;" class="ui-accordion-content ui-helper-reset ui-widget-content ui-corner-bottom">
<ul>
<li><a href="http://linkaddress.co.uk" rel="bookmark" title="Article Four">Article Four</a></li>
<li><a href="http://linkaddress.co.uk" rel="bookmark" title="Article Five">Article Five</a></li>
</ul>
</div>
</div>
А вот мой код скрипта (который просто помещается в голову):
$(document).ready(function() {
$('h3.ui-accordion-header-active').attr('tabindex', '-1');
$('h3.ui-accordion-header-active').attr('aria-selected', 'false');
$('div.ui-accordion-content-active').prev().removeClass('ui-accordion-header-active ui-state-active ui-corner-top').addClass('ui-corner-all');
$('div.ui-accordion-content-active').css("display","none");
$('div.ui-accordion-content-active').attr('aria-expanded', 'false');
$('div.ui-accordion-content-active').attr('aria-hidden', 'true');
$('div.ui-accordion-content-active').removeClass("ui-accordion-content-active");
$('li.current-article').closest("div").addClass("ui-accordion-content-active");
$('div.ui-accordion-content-active').attr('aria-expanded', 'true');
$('div.ui-accordion-content-active').attr('aria-hidden', 'false');
$('li.current-article').closest("div").css("display","block");
$('div.ui-accordion-content-active').prev().removeClass('ui-corner-all').addClass('ui-accordion-header-active ui-state-active ui-corner-top');
$('h3.ui-accordion-header-active').attr('tabindex', '0');
$('h3.ui-accordion-header-active').attr('aria-selected', 'true');
});
Я не эксперт по Java (как вы, вероятно, можете догадаться) - я просто шаг за шагом убрал "активные" классы и атрибуты для "активной" вкладки по умолчанию и поместил их в "текущую" вкладку.
Я сравнил разметку или различные состояния с моим кодом и без него, чтобы увидеть, пропустил ли я что-нибудь, но я не вижу различий.
Моя проблема связана со сроками применения моих изменений? Или мои изменения блокируют что-то, что освобождается при повторном нажатии?
Приветствия.
1 ответ
Хорошо - узнал немного больше сегодня... вместо того, чтобы пытаться редактировать всю разметку, я должен просто смоделировать событие щелчка. Simples.
Поэтому вместо этого раздутого фрагмента кода скрипта я заменил это:
$(document).ready(function() {
if ($('#accordion').length) {
$('li.current-article').closest("div").prev("h3").click();
}
});
Это ищет статью с пометкой "текущая статья" и затем "щелкает" ее связанный заголовок h3.