2014-11-10 2 views
2

Я пытаюсь запустить jQuery на моем сайте.jQuery переключается на несколько div с тем же классом

Пока мой код:

<script> 
$(document).ready(function(){ 
    $(".flip").click(function(){ 
    $(".flippanel").toggle(); 
    }); 
}); 
</script> 

Я тогда в HTML есть:

<p class="flip">Flip it!</p> 
<p class="flippanel">This is a paragraph with little content.</p> 
<p class="flippanel">This is another small paragraph.</p> 
<p class="flip 2">Flip it!</p> 
<p class="flippanel 2 ">This is a paragraph with little content.</p> 
<p class="flippanel 2">This is another small paragraph.</p> 

Как я могу идти о том, что для переключения двух панелей независимо друг от друга? Прямо сейчас, каждая панель переключается в одно и то же время.

+0

Ну, вы используете один и тот же класс «flippanel» для обоих разделов, что, естественно, сделает оба раздела соответствующим образом переключены. – entiendoNull

+0

Hi entiendoNull, я понимаю, что - я просил совета относительно того, как иметь потенциально бесконечное количество панелей флип, так что это был итеративный пример. –

+0

Я также не был особенно ясен по моим фактическим требованиям - мне нужна кнопка переключения некоторого описания (т. Е. Бит «Flip it!»), А затем мне нужен контейнер, полный содержимого. Я использую это, чтобы показать несколько виджетов «купить» на веб-странице - это для учебной компании, где один курс может иметь различные варианты распространения. –

ответ

1

Выберите следующие два p .flippanel того, который вы нажимаете каждый раз.

nextAll выбрать все следующие братья и сестры

slice(0, 2) сужает к первому два

Try:

$(".flip").click(function(){ 
    $(this).nextAll(".flippanel").slice(0, 2).toggle(); 
    }); 

DEMO

2

Так это выглядит, как вы хотите детали класса flippanel к скрыть себя, когда вы нажимаете «перевернуть»? Затем я рекомендовал бы вместо этого поместить их внутрь div, чтобы при щелчке по нему весь div обрушился.

Таким образом, вы можете сделать что-то вроде:

$(".flip").click(function(){ 
    $(this).children().toggle(); 
}); 

Если вы думаете, что это код для вас, но не нравится, что все внутри из DIV кликабельна, вы можете добавить следующий код Кроме того, если вы считаете, что это решение для вас, вы можете добавить следующий код, который сделает его таким, что только «Flip it!» часть кликабельна. Я обновил свою скрипку ниже, чтобы включить этот код.

$(".flippanel").click(function(event) { 
    event.stopPropagation(); 
}); 

I've made a JSFiddle for you if you click this line to look.

+1

Это работает очень хорошо! Большое спасибо - другие решения также были полезны, но для меня это кажется самым простым для развертывания. Best, Jim –

+0

А - Я только что обнаружил проблему с этим. Если вы нажмете на что-нибудь внутри флип, оно действует как переключатель. Мне нужно, чтобы переключатель был отдельным, так что он остается, когда вы его открываете. Наверное, вначале не было ясно! –

+0

Ах, да, это решение упаковывает все на два div. Поэтому, если вы нажмете любое пространство внутри этих двух div, оно разрушит сам div. Я вроде как предполагал, что вам просто нужны две складные панели. –

0
$(".flip").click(function(){ 
     $(this).next().toggle(); 
     $(this).next().next().toggle(); 
}); 

будет работать.

http://jsfiddle.net/xyqwmzhj/2/

но вы действительно должны рассмотреть переписывать HTML, использовать одни и те же классы для содержания и происходит с детьми или что-то подобное.

[править] если вы хотите, чтобы начать закрытое, добавьте

style="display: none;" 

в DIV, которые должны быть скрыты.

полный HTML:

<p class="flip" style="cursor: pointer;">Flip it!</p> 
<div style="display: none;"> 
<p class="flippanel">This is a paragraph with little content.</p> 
<p class="flippanel">This is another small paragraph.</p> 
</div> 
<p class="flip" style="cursor: pointer;">Flip it!</p> 
<div style="display: none;"> 
<p class="flippanel">This is a paragraph with little content.</p> 
<p class="flippanel">This is another small paragraph.</p> 
</div> 
+0

Кажется, что он работает очень хорошо - я могу фактически обернуть содержимое в div, поэтому он подходит только для следующего элемента. Любые идеи, как я делаю это так, чтобы все откидные панели начали закрываться? –

+0

отредактировал ответ, добавил wrapper div, сделал курсор указателя и изменил имена плохих классов. подумайте о том, чтобы дать div свой класс и передать внешний вид дисплея: скрытый в css. то же самое касается курсора: указатель, который принадлежит классу .flip – cari

+0

Кстати: не стесняйтесь принимать ответ, если он соответствует вашим потребностям :-) – cari

0

Числа являются недопустимыми в качестве HTML класса.

Попробуйте так:

<p class="flip flip_1">Flip it!</p> 
<p class="flippanel flippanel_1">This is a paragraph with little content.</p> 
<p class="flippanel flippanel_1">This is another small paragraph.</p> 
<p class="flip flip_2">Flip it!</p> 
<p class="flippanel flippanel_2 ">This is a paragraph with little content.</p> 
<p class="flippanel flippanel_2">This is another small paragraph.</p> 

Таким образом, ваш стиль, например, можно прикрепить к классу flippanel и ваш JS может выглядеть следующим образом:

<script> 
$(document).ready(function(){ 
    $(".flip").click(function(){ 
    $(".flippanel_1").toggle(); 
    }); 
}); 
</script> 
2

Что вам нужно использовать .nextUntil(). Он получит каждый следующий элемент, пока вы не нажмете переданный селектор.

$(".flip").click(function(){ 
    $(this).nextUntil('.flip').toggle(); 
}); 

Обратите внимание, что переданный селектор исключен из объекта.

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