Скрыть/показать отдельные блоки при клике
Здравствуйте уважаемые, пытаюсь написать маленький скрипт который во время клика по отдельной ссылке должен скрывать или показывать отдельные блоки. Как бы все просто, но у меня не работает. Сам скрипт загружаю после jQuery.
Скрипт:
$(document).ready(function() {
$(".all-btn").click(function() {
$(".auto").css({"display":"block"});
$(".auto-gd").css({"display":"block"});
$(".avia").css({"display":"block"});
});
$(".auto-btn").click(function() {
$(".auto").css({"display":"block"});
$(".auto-gd").css({"display":"none"});
$(".avia").css({"display":"none"});
});
$(".auto-gd-btn").click(function() {
$(".auto").css({"display":"none"});
$(".auto-gd").css({"display":"block"});
$(".avia").css({"display":"none"});
});
$(".avia-btn").click(function() {
$(".auto").css({"display":"none"});
$(".auto-gd").css({"display":"none"});
$(".avia").css({"display":"block"});
});
});
html: <a class="all-btn" href="#">All</a> <a class="auto" href="#">Auto</a> <a class="auto-gd" href="#">auto-gd</a> <a class="avia" href="#">avia</a> <div class="ekskurs-tur"> <div class="auto"> auto1 </div> <div class="auto"> auto2 </div> <div class="auto-gd"> auto-gd1 </div> <div class="avia"> avia1 </div> <div class="auto"> auto3 </div> <div class="avia"> avia2 </div> </div> |
Поищи на этом форуме "открывашка"... ;)
|
Цитата:
|
Chmil, если ссылки имеют общего родителя, то лучше в нем найти их (по селектору родителя), а затем им всем один обработчик, в котором (к элементу ekskurs-tur лучше по id обращаться, в примере parent_div):
var elm = $('#parent_div').children();
if($(this).hasClass('all-btn')) {
elm.show();
return;
}
elm.hide().filter('.'+this.className).show()
|
laimas,
спасибо за Ваш ответ, как я понял, мне нужно заменить class="ekskurs-tur" на #parent_div, но дальше не могу до конца понять етот код, как мне его применить в своем случаи? |
Цитата:
Достаточно одного обработчика, и чтобы не перечислять кнопки по их селекторам (классам), удобнее обратиться к ним по коллекции родителя. То есть, вместо:
$('.all-btn,.auto,.auto-gd,.avia').click(function() {
//здесь код показанный
})
установить так:
$('#parent_selector a').click(function() {
//здесь код показанный
})
где parent_selector имя id в котором находятся кнопки. Это предпочтительней, так как позволяет добавлять новые кнопки фильтра без изменения js кода. Так понятно? |
Цитата:
|
Цитата:
Как вариант...
<!DOCTYPE html>
<html>
<head>
<meta http-equiv='Content-Type' content='text/html; charset=windows-1251' />
<script src='https://code.jquery.com/jquery-latest.js'></script>
<!--
<script src="https://code.angularjs.org/1.3.9/angular.min.js"></script>
<script src="https://code.angularjs.org/1.3.9/angular-route.js"></script>
-->
<style type='text/css'>
.off {
display: none;
}
</style>
<script type='text/javascript'>
$(function(){
$('#filter a').click(function(){
var type=$(this).data('type');
var o=$('.ekskurs-tur > div');
if (type=='all') {
o.removeClass('off');
return;
};
o.addClass('off');
o.filter('.'+type).removeClass('off');
});
$('.ekskurs-tur > div').addClass('off');
});
</script>
</head>
<body>
<div id='filter'>
<a class="all-btn" data-type='all' href="#">All</a>
<a class="auto" data-type='auto' href="#">Auto</a>
<a class="auto-gd" data-type='auto-gd' href="#">auto-gd</a>
<a class="avia" data-type='avia' href="#">avia</a>
</div>
<div class="ekskurs-tur">
<div class="auto">
auto1
</div>
<div class="auto">
auto2
</div>
<div class="auto-gd">
auto-gd1
</div>
<div class="avia">
avia1
</div>
<div class="auto">
auto3
</div>
<div class="avia">
avia2
</div>
</div>
</body>
</html>
Вот и добавилась в поиск еще одна открывашка... :D |
ksa, а зачем еще и через data атрибуты практически дублировать классы? Было бы полезным тогда иметь одно имя класса как селектор общий, а в дата атрибутах имя (наборы имен) классов для фильтра.
Да и ради только скрыть/показать оперировать классами ни к чему. |
Цитата:
Цитата:
Цитата:
laimas, вроде у американцев есть поговорка (за точность не ручаюсь) Цитата:
|
| Часовой пояс GMT +3, время: 22:56. |