Класс для dt
Добрый день!
Есть следующая структура (меню с эффектом accordion):
<dl id="left_menu">
<dt>Item 1</dt>
<dt>Item 2</dt>
<dd>SubItem 2.1</dd>
<dt>Item 3</dt>
<dd>SubItem 3.1</dd>
<dt>Item 4</dt>
<dt>Item 5</dt>
</dl>
Если кликнуть на dt, которые не содержат dd, нужен class="active", а если содержат - class="arrow". Пробовал функции: next(), nextUntil(), siblings(), is(), но безрезультатно. Оригинальный код:
var item = menu.find('dt');
var subitems = menu.find('dd');
item.click(function (event) {
item.removeClass('active');
$(this).addClass('active');
var subitem = $(this).next('dd:first');
if( subitem.length == 0 ){
subitems.removeClass('active').slideUp();
}
if (typeof (subitem) == 'object')
if (subitem.length > 0) {
if (subitem.is('.active'))
subitem.removeClass('active').slideUp();
else {
subitems.removeClass('active').slideUp();
subitem.addClass('active').slideDown();
}
event.preventDefault();
event.stopPropagation();
}
});
subitems.hide();
Направьте, пожалуйста, на путь истинный! Заранее благодарен |
Цитата:
|
Цитата:
|
Да, идут следом, "не содержат" - я не правильно выразился. Прошу прощения! Если бы была вложенность, то children() решил проблему
|
maincg,
Вариант...
<!DOCTYPE HTML>
<html>
<head>
<title>Untitled</title>
<script src="http://code.jquery.com/jquery-1.9.1.js"></script>
<style type="text/css">
dd{
display: none;
}
</style>
</head>
<body>
<dl id="left_menu">
<dt>Item 1</dt>
<dt>Item 2</dt>
<dd>SubItem 2.1</dd>
<dt>Item 3</dt>
<dd>SubItem 3.1</dd>
<dt>Item 4</dt>
<dt>Item 5</dt>
<dd>SubItem 5.1</dd>
</dl>
<script>
$('dt').click(function (event) {
$(this).nextUntil('dt').slideToggle()
})
</script>
</body>
</html>
|
рони, спасибо.
Accordion работает, но главная проблема в том, что если после <dt> идет следующий <dt>, то первый <dt> должен получить class="arrow_right", ну а если идет следующий <dd> после <dt>, то <dt> получает class="arrow_down". Задача, казалось бы, банальная, изменить стрелки, в зависимости от пункта меню (parent/not parent), но пока не получилось решить проблему |
А может на сервере проставлять классы? Сервак то прекрасно знает какой элемент - родитель, а какой - пуст. Нормальные люди так и поступают вообще-то.
|
maincg,
добавил Цитата:
<!DOCTYPE HTML>
<html>
<head>
<title>Untitled</title>
<script src="http://code.jquery.com/jquery-1.9.1.js"></script>
<style type="text/css">
dd{
display: none;
}
.arrow_right{
background-color: #FF3300;
}
.arrow_down{
background-color: #FFFF33;
}
</style>
</head>
<body>
<dl id="left_menu">
<dt>Item 1</dt>
<dt>Item 2</dt>
<dd>SubItem 2.1</dd>
<dt>Item 3</dt>
<dd>SubItem 3.1</dd>
<dt>Item 4</dt>
<dt>Item 5</dt>
<dd>SubItem 5.1</dd>
</dl>
<script>
$ ("dt").prev("dt").addClass("arrow_right");
$ ("dd").prev("dt").addClass("arrow_down")
.click(function (event) {
$(this).nextUntil('dt').slideToggle()
})
</script>
</body>
</html>
|
Спасибо всем за помощь! Отдельная огромная благодарность РОНИ!!! С меня пиво. Жду в ЛС номер кошелька, отправлю на выходных или после них.
|
| Часовой пояс GMT +3, время: 01:47. |