Здесь есть две проблемы.
- Как выполнить одно и то же действие для нескольких элементов
- Как узнать, на каком элементе вы щелкнули, чтобы вы могли запустить соответствующее действие на него. (большинство существующих ответов пропускают эту часть).
Первый - использовать класс для каждого элемента, который вы хотите щелкнуть, вместо того, чтобы соединяться через идентификатор. Вы можете использовать селектор, подобный [id^=id]
, но использовать класс просто.
<div id="id1" class="toggler">...
, который позволяет:
$(".toggler").click(function() ...
во-вторых, он ассоциирует кликабельный сэлемент, который вы хотите переключить. Есть много способов сделать это, я предпочитаю ассоциировать их с data-
атрибутами, например:
<div class="togger" data-toggle="#toggle1">...
, что позволяет вам:
$(".toggler").click(function() {
$($(this).data("toggle")).toggle();
});
Ключ здесьчто this
является элементом, по которому щелкают, поэтому вы можете сделать что-нибудь еще с this
, например, показать / скрыть значок внутри или изменить цвет.
Пример:
$(".toggler").click(function() {
$($(this).data("toggle")).toggle();
$(this).toggleClass("toggled");
});
.toggler { cursor: pointer }
.toggled { background-color: green }
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="toggler" data-toggle="#t1">T1</div>
<div class="toggler" data-toggle="#t2">T2</div>
<div class="toggler" data-toggle="#t3">T3</div>
<hr/>
<div id="t1" style='display:none;'>T1 content</div>
<div id="t2" style='display:none;'>T2 content</div>
<div id="t3" style='display:none;'>T3 content</div>