Ответ 1
В большинстве плагинов jQuery есть объект опций, в который вы проходите. Здесь вы можете определить свойства, которые вы хотите установить, включая обработчики событий.
документация для событий аккордеона зебры говорит для каждого из событий, которые предоставляет плагин:
Функция обратного вызова принимает 3 аргумента:
- позиция закладки в баяне (на основе 0)
- связанный элемент заголовка, как объект jQuery
- вкладка, как объект jQuery
Я только что дал им 3 подходящих имени и использовал второй аргумент (который я произвольно назвал hdr
).
Как указано в документации, возвращаемый аргумент hdr
- это объект jQuery, обертывающий элемент <dt>
(по крайней мере, в моем примере). На этом объекте я назвал функцию jQuery .find()
, чтобы найти элемент внутри этого <dt>
, имеющий класс fa-chevron-*
, и то я переключаю классы на span
, связывая дальнейшие функции jQuery.
Как отмечено в комментариях, вы можете сделать это отлично, как:
var accordian = new $.Zebra_Accordion($('.Zebra_Accordion'), {
collapsible: true,
onBeforeOpen: function(index, hdr, body) {
hdr.find(".fa-chevron-down").removeClass('fa-chevron-down').addClass('fa-chevron-up');
},
onBeforeClose: function(index, hdr, body) {
hdr.find(".fa-chevron-up").removeClass('fa-chevron-down').addClass('fa-chevron-down');
}
});
И в этом конкретном случае я бы хотел, но я хотел проиллюстрировать, что делать, когда обработчики имеют больше кода, и в этом случае создание их отдельных функций делает их более удобочитаемыми.
Не забудьте использовать console.log()
- это лучший друг разработчика JavaScript.
Чтобы проверить, что мне подарил этот аккордеон Zebra, я сделал следующее:
onBeforeOpen: function(index, hdr, body) {
console.log("onBeforeOpen", index, hdr, body);
},
Этот вывод отображается в консоли разработчика браузера.
Здесь моя демонстрация все вместе:
$(function() {
// add default chevrons here so they only get appended once
$(".Zebra_Accordion dt").append("<span class='chevron fa fa-chevron-down'></span>");
// set up the according options
var accordian = new $.Zebra_Accordion($('.Zebra_Accordion'), {
collapsible: true,
onBeforeOpen: showCollapseChevron,
onBeforeClose: showExpandChevron
});
function showExpandChevron(index, hdr, body) {
hdr.find(".fa-chevron-up").removeClass('fa-chevron-up').addClass('fa-chevron-down');
}
function showCollapseChevron(index, hdr, body) {
hdr.find(".fa-chevron-down").removeClass('fa-chevron-down').addClass('fa-chevron-up');
}
});
dl.Zebra_Accordion { width: 100% }
dl.Zebra_Accordion dt { background: #000; color: #FFF; font-weight: bold; padding: 5px }
dl.Zebra_Accordion dd { background: #EFEFEF; padding: 15px; margin: 1px 0 }
dl.Zebra_Accordion dt.Zebra_Accordion_Expanded { background: #C40000 }
.chevron {
margin-left: 5px;
}
<script src="https://code.jquery.com/jquery-3.2.1.min.js"></script>
<script src="https://cdn.jsdelivr.net/gh/stefangabos/Zebra_Accordion/dist/zebra_accordion.min.js"></script>
<link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/gh/stefangabos/Zebra_Accordion/dist/zebra_accordion.min.css">
<link rel="stylesheet" type="text/css" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css">
<dl class="Zebra_Accordion">
<dt>Lorem ipsum dolor sit amet consectetuer</dt>
<dd>
Lorem ipsum dolor sit amet consectetuer facilisis lacinia sapien ac et. Quis hendrerit neque congue pretium iaculis justo laoreet orci elit condimentum. Eros natoque Curabitur accumsan eget quis porttitor Sed Vestibulum amet sed.
</dd>
<dt>Lorem ipsum dolor sit amet consectetuer</dt>
<dd>
Lorem ipsum dolor sit amet consectetuer facilisis lacinia sapien ac et. Quis hendrerit neque congue pretium iaculis justo laoreet orci elit condimentum. Eros natoque Curabitur accumsan eget quis porttitor Sed Vestibulum amet sed.
</dd>
<dt>Lorem ipsum dolor sit amet consectetuer</dt>
<dd>
Lorem ipsum dolor sit amet consectetuer facilisis lacinia sapien ac et. Quis hendrerit neque congue pretium iaculis justo laoreet orci elit condimentum. Eros natoque Curabitur accumsan eget quis porttitor Sed Vestibulum amet sed.
</dd>
<dt>Lorem ipsum dolor sit amet consectetuer</dt>
<dd>
Lorem ipsum dolor sit amet consectetuer facilisis lacinia sapien ac et. Quis hendrerit neque congue pretium iaculis justo laoreet orci elit condimentum. Eros natoque Curabitur accumsan eget quis porttitor Sed Vestibulum amet sed.
</dd>
</dl>