#javascript #jquery #html #accordion #slidetoggle
#javascript #jquery #HTML #аккордеон #slidetoggle
Вопрос:
ДЕМОНСТРАЦИЯ
Я делаю простой эффект аккордеона jquery, как показано ниже.
JQUERY
$(function ($) {
$('.Accordian').find('.Btn').click(function () {
$(this).next('.Content').slideToggle('fast');
$('.Content').not($(this).next()).slideUp('fast');
});
});
HTML
<div class="Accordian">
<div class="Btn"></div>
<div class="Content"></div>
</div>
Однако это отлично работает, если содержимое помещается между .Btn
ними, а .Content
затем оно прерывается.
ВОПРОС
- Как напрямую настроить таргетинг на следующее доступное имя класса относительно нажатой кнопки?
- Как настроить таргетинг на все элементы имени класса, кроме следующего доступного имени класса относительно нажатой кнопки?
Комментарии:
1. » если содержимое помещается между . Btn и . Содержимое » — я не понял эту часть. Почему вы хотите разместить содержимое снаружи
.Content
? можете ли вы уточнить ..?2. Я не использую аккордеон в традиционном смысле. Иногда я хочу постоянно показывать некоторый контент, который никогда не скрывается, но должен быть под кнопкой.
3. Я добавил комментарий перед проверкой скрипки. «элементы» или «содержимое html» было бы более понятным вместо «содержимого», поскольку у вас уже есть такой div…
4. @Obsidion если вы пытаетесь настроить таргетинг только на . Содержимое и оставить видимым «прерывающий текст» .. тогда ПОЧЕМУ вы ориентируетесь на него в первую очередь?
5. Если вы собираетесь проголосовать против, по крайней мере, проявите порядочность, чтобы объяснить, почему!
Ответ №1:
Попробуйте с помощью siblings()
$(function ($) {
$('.Accordian').find('.Btn').click(function () {
//cache the value so that it can be used in the next statement
var $content = $(this).siblings('.Content').slideToggle('fast');
$('.Content').not($content).slideUp('fast');
});
});
Ответ №2:
Попробуйте использовать .nextAll()
вместе с .first()
для выполнения вашей задачи, на самом деле здесь мы использовали .first()
в целях безопасности.
$('.Accordian').find('.Btn').click(function () {
var targetElem = $(this).nextAll('.Content').first();
targetElem.slideToggle('fast');
$('.Content').not(targetElem).slideUp('fast');
});