Получение ID соседнего элемента со схожей маской jquery
Не планировал особенно вникать в jquery, босс затребовал раскрывающееся меню.
Скопировал скрипт для UL LI DIV со SlideUp и SlideDown, все работало отлично - босс говорит не пойдет, можно было сделать в разы проще, а такую конструкцию слишком сложно обслуживать. Потом он привел мне пример: <a class="catalog" id="cat_link_1"><p>Корпусная мебель</p></a> <div class="box" id="cat_link_1"> <a href="#">Пункт1</a> <a href="#">Пункт2</a> <a href="#">Пункт3</a> <a href="#">Пункт4</a> </div> <a class="catalog" id="cat_link_2"><p>Офисная мебель</p></a> <div class="box" id="cat_link_2"> <a href="#">Пункт1</a> <a href="#">Пункт2</a> <a href="#">Пункт3</a> <a href="#">Пункт4</a> </div> После этого были часы томительных поисков в Интернете не имея навыков написания JS кода... и вот что получилось.
$(document).ready (
function () {
$('#cat_div_'+divid).click (
function() {
if ($('#cat_link_'+divid).hasClass('active')) {
$('#cat_link_'+divid).removeClass('active');
$('#cat_link_'+divid).slideUp('medium');
} else {
$('#cat_link_'+divid).addClass('active');
$('#cat_link_'+divid).slideDown('medium');
}
}
);
}
);
Однако очевидно, что где-то напортачил с разметкой или синтаксисом. А может кто-нибудь сможет подсказать вообще по-другому. Задача: Мне необходимо сделать скрипт, который по нажатию на любую <a> с классом .catalog либо с маской по id :: "cat_div_" присваивало следующему диву с маской "cat_link_" и ТЕМ ЖЕ НОМЕРОМ - класс active. Есть идеи? |
посмотрите toggleClass
$(function(){
$(".catalog").click(function(){
$(this).next('div').eq(0).toggleClass('active','medium');
return false;
});
});
|
весьма интересно, но "код сложный" это я про другое говорил, он не хотел чтобы в HTML использовалось UL LI и привел пример через A DIV. Сказал - покурить мануалы на тему выборки по маске.
Мол "сделай, чтобы при нажатии на любой элемент с маской cat_div_# (вместо решетки - номер), элементы cat_link_# (тот же номер) присваивался класс актив. Эту конструкцию сейчас попробую. Интересны пару моментов: 1. зачем нужно eq(0)? 2. я так понимаю, что переменную switch мы просто обозвали medium, и зачем-то вернули ее значение? вот только какая польза нам от булевского значения в переменной toggle? Спасибо за помощь! |
Вот пример:
<head>
<style>
.active{
font-size: 20px;
}
.medium{
font-size: 10px;
}
</style>
<script type="text/javascript" src="http://code.jquery.com/jquery-1.6.1.min.js">
</script>
<script type="text/javascript">
$(function(){
$(".catalog").click(function(){
$("#cat_div_" + this.id.match(/^cat_link_(\d)+/)[1]).toggleClass('active','medium');
return false;
});
});
</script>
</head>
<body>
<a id="cat_link_1" class="catalog">link 1</a>
<div id="cat_div_1">div 1</div>
<a id="cat_link_2" class="catalog">link 2</a>
<div id="cat_div_2">div 2</div>
<a id="cat_link_3" class="catalog">link 3</a>
<div id="cat_div_4">div 4</div>
<a id="cat_link_4" class="catalog">link 4</a>
<div id="cat_div_3">div 3</div>
</body>
|
Невероятно! Работает!! :D
Думалка зашевелилась, добавил туда slideToggle и... о-жесть! когда жму на кнопку - изначально оно ЗАКРЫВАЕТСЯ(при первом нажатии), а потом уже открывает и закрывает как нужно. |
ну это уже со стилями разбираться
|
Ну вот так оно вроде как правильно должно работать но вообще ничего не делает. Хотя раньше именно по такой методике работало все:
$(document).ready (
function () {
$('.catalog').click (
function() {
if ($("#cat_div_" + this.id.match(/^cat_link_(\d)+/)[1]).hasClass('active')) {
$("#cat_div_" + this.id.match(/^cat_link_(\d)+/)[1]).removeClass('active');
$("#cat_div_" + this.id.match(/^cat_link_(\d)+/)[1]).slideUp('medium');
} else {
$("#cat_div_" + this.id.match(/^cat_link_(\d)+/)[1]).addClass('active');
$("#cat_div_" + this.id.match(/^cat_link_(\d)+/)[1]).slideDown('medium');
}
}
);
}
);
|
попробуй поменять стили с помошью js
|
| Часовой пояс GMT +3, время: 20:36. |