#jquery #html #slidetoggle
#jquery #HTML #slidetoggle
Вопрос:
Хорошо, переделываем вопрос на гораздо более простой.
Вот мой HTML-код.
<p>
<span id="tripTitle">Trip #1</span>amp;nbsp;
<span class="expandicon" style="display:none;">
<span class="flip">
<img class="expand" src="img/expand1.png" />
</span>
</span>
<span class="shrinkicon">
<span class="flip">
<img class="shrink" src="img/shrink1.png" />
</span>
</span>
</p>
<div class="panel"><table id="table" width="100%">
some text here.
</div>
и вот Java:
$(document).ready(function(){
$(".flip").click(function(){
$(".panel").slideToggle("slow");
});
HTML-код будет повторяться 10 раз на одной странице или для каждой созданной поездки. Код javascript переключит все div с классом «panel». Вопрос в том, есть ли способ, чтобы единственный div, который переключается, был ближайшим или рядом с изображением с нажатым классом «flip»?
Кстати, вот его jsfiddle. http://jsfiddle.net/LyUnB /
Ответ №1:
Использование
$(this).parent().nextAll(".panel:eq(0)").slideToggle("slow");
.panel
является родным братом родительского узла .flip
Комментарии:
1. Это абсолютно работает. Но, похоже, в конце есть некоторая несогласованность в перемещении таблицы. Есть идеи, что является причиной этого?
2. Я не могу дать ответ, не увидев ваш CSS
3. На самом деле у меня не так много CSS, кроме редактирования шрифтов, просто использую классы для jQuery. Здесь вы можете увидеть мой пример на jsfiddle.net/LyUnB
4. Понял. Просто добавьте еще один .parent(). $(this).parent().parent().nextAll(«.panel:eq(0)»).slideToggle(«медленный»); Спасибо, @DR.Molle.
Ответ №2:
Или вы можете просто использовать
$(document).ready(function(){
$(".flip").click(function(){
$(this).parent().next(".panel").slideToggle("slow");
});
});
У вас есть кнопка расширения, сжатия внутри другого диапазона, поэтому, когда вы проверяете .next()
в jQuery, она не находит '.panel'
, мы делаем один шаг назад, используя parent()
, а затем .next()
перейдем к '.panel'
div
Спасибо
Комментарии:
1. Он переключается только при отображении кнопки сворачивания; ничего не делает, когда я нажимаю развернуть, но меняю изображение на минимизированное. Кроме того, если я оберну первые три строки HTML, которые я опубликовал, с помощью <p></p> , переключение кажется неэффективным. Новичок здесь.
2. Да, вы должны позаботиться о структуре html, если вы измените макет html, вам также придется изменить JS. Что касается вашего другого вопроса о отображении изображения, вы можете просто изменить img src дочернего изображения внутри flip span.
3. Есть ли еще один уровень выше родительского? Это если я оберну текст заголовка и изображение в <p></p> . Спасибо @aamir.
4. вы можете использовать
$(this).parent().parent().parent()...
n-й раз
Ответ №3:
Попробуйте:
$(document).ready(function(){
$(".flip").click(function(){
$(this).closest(".shrinkicon").next(".panel").slideToggle("slow");
});
});
Редактировать:
Отлично работает в моей системе. Вот рабочий пример с jsfiddle
Комментарии:
1. Это ничего не дает, мой друг.
2. @MikeSanchez, здесь все работает нормально. Я обновил свой ответ ссылкой на рабочий пример.
3. У меня получилось, спасибо. Любой HTML-код, чтобы остановить перемещение таблицы заголовка 2 рядом с таблицей 1 после переключения? Я пробовал <br />, но он защелкивается до завершения слайда. Завернутый заголовок 1 и изображение в <p></p>, но это предотвращает переключение тем.