С помощью jQuery скрыть отображение несколько раз

#jquery #click #hide #show

#jquery #нажмите #скрыть #показать

Вопрос:

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

 $(document).ready(function(){
  $("#expand").click(function(){
    $(".expandicon").hide();
    $(".shrinkicon").show();
  });
  $("#shrink").click(function(){
    $(".expandicon").show();
    $(".shrinkicon").hide();
  });
});
  

Единственная проблема в том, что я могу использовать его только один раз (первый экземпляр, затем второй значок не меняется и так далее). В целом, мне пришлось бы использовать его 5 раз, поскольку у меня есть 5 таблиц на одной странице. Есть идеи, как это сделать? Я довольно новичок в веб-разработке, не говоря уже о jQuery. Любая помощь была бы с благодарностью. Заранее спасибо!

[РЕДАКТИРОВАТЬ] Вот мой HTML-код:

 <span class="expandicon" style="display:none;">
  <a class="flip">
    <img id="expand" src="img/expand1.png" />
  </a>
</span>
<span class="shrinkicon">
  <a class="flip">
    <img id="shrink" src="img/shrink1.png" />
  </a>
</span>
  

* вместо этого идентификаторы заменятся классами. я не прав в этом.

Комментарии:

1. Покажите соответствующую структуру HTML (дерево вокруг #развернуть / # сжать / значки). Это необходимо для ответа на этот вопрос.

2. Подсказка: идентификаторы должны быть уникальными, мне кажется, что вы используете расширение и сжатие идентификатора пять раз. Измените это на класс или что-то в этом роде.

Ответ №1:

С

 $(".expandicon").hide();
  

вы скрываете все элементы на странице с помощью class=’expandicon’

и с

 $(".shrinkicon").show();
  

отображаются все элементы с class=’shrinkicon’.

Посмотрите в селекторах.

В вашем случае попробуйте это:

HTML:

 <span class="expandicon" style="display:none;"> expand 1 </span>
<span class="shrinkicon"> shrink 1 </span>
<br/>
<span class="expandicon" style="display:none;"> expand 2 </span>
<span class="shrinkicon"> shrink 2</span>
  

JS:

 $(function(){
    $('span.expandicon').click(function(){
        $(this).toggle().next('span.shrinkicon').toggle();    
    });
    $('span.shrinkicon').click(function(){
        $(this).toggle().prev('span.expandicon').toggle();        
    });
});
  

Вы можете протестировать это здесь

Комментарии:

1. Спасибо за помощь! «оцените это.

Ответ №2:

Вы можете использовать css для установки изображения в качестве фона. Чем создавать класс shrink и expand и использовать toggleClass() ( http://api.jquery.com/toggleClass / ), чтобы переключаться между ними по щелчку.

Ответ №3:

Мы не сможем вам сильно помочь без HTML-кода, но вот несколько советов:

  • вы можете использовать .toggle() метод для динамического скрытия / отображения элемента в зависимости от его предыдущего состояния
  • если вам нужно применить одно и то же событие к нескольким элементам, вам лучше использовать классы вместо идентификаторов (помните, что идентификаторы уникальны)

[РЕДАКТИРОВАТЬ] Вот пример:http://jsfiddle.net/SShK6 /

[РЕДАКТИРОВАТЬ 2] Вот пример с вашим HTML-примером:http://jsfiddle.net/ux8Nw /

Комментарии:

1. Вот HTML: <span><a class=»flip»><img id=»expand» src=»img / expand1.png» /></a></span><span><a class=»flip»><img id=»shrink» src=»img /shrink1.png» /></a></span> С: $(document) Возникает т а же проблема.готово(функция (){ $(«.flip»).click(функция(){ $(«.panel»).slideToggle («slow»); }); }); Я могу использовать его тол ько один раз. Если я использую его в следующей таблице, он скрывает обе таблицы.