Задать вопрос

Как реализовать следующее в JS?

Здравствуйте, ув. Тостерчани
Рубрика тупых вопросов от меня снова открыта.

Подскажите пожалуйста, существует html разметка и js код

<div class="open-1">+</div>
<b>Вопрос? </b>
<div class="answer-one">Всплывающий текст-подсказка</div>


$(".open-1").click(function() {
		$(".answer-one").slideToggle();
	})


Ну то есть, при клике на open-1 откроется див с answer-one

Вопрос : как сделать в js коде так, что бы помимо открытия и закрытия, текст в диве .open-1 менялся, в данном случае + на - , а так же когда всплывающий текст подсказка открыт, тег < b > скрывается. Ну и соответственно всё на оборот.

Спасибо большое заранее
  • Вопрос задан
  • 260 просмотров
Подписаться 1 Оценить 2 комментария
Решения вопроса 3
Decadal
@Decadal
(".open-1").click(function() {
   var opened = $(this).data("opened"),
   $bTag = $("b");
   if(opened)
   {
      $(this).html("+");
      $bTag.fadeIn(0);
      $(this).data("opened","");
   }
   else 
   {
      $(this).html("-");
      $bTag.fadeOut(0);
      $(this).data("opened","1");
   }
    $(".answer-one").slideToggle();
  })

но учтите, что при использовании нескольких элементов такого вида вы должны оборачивать каждый элемент в некоторый родительский контейнер, и указывать родителя при работе с тегом b. На данный момент код, который подхватывает "b", будет работать со всей страницей вообще.

каждая конструкция такого вопроса должна представлять из себя следующее:
<div class="quest-content">
<div class="open">+</div>
<b>Вопрос? </b>
<div class="answer">Всплывающий текст-подсказка</div>
</div>


тогда вы сможете создать несколько экземпляров (просто копировать-вставить разметку выше), задать в каждом - свой текст, вопрос и прочее, и написать общий код:

(".open").click(function() {
   var opened = $(this).data("opened"),
   $parent = $(this).parent(".quest-content"),
   $bTag = $parent.find("b");
   if(opened)
   {
      $(this).html("+");
      $bTag.fadeIn(0);
      $(this).data("opened","");
   }
   else 
   {
      $(this).html("-");
      $bTag.fadeOut(0);
      $(this).data("opened","1");
   }
    $parent.find(".answer").slideToggle();
  })


это, наверное, плохо оптимизировано, но должно работать.
Ответ написан
Bowen
@Bowen
Японский бог
$(".open-1").on('click', function(){
    this.innerText = (this.innerText == '+') ? '-' : '+';
    $("b, .answer-one").slideToggle();
});
Ответ написан
@lega
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы