Скрытие-показ кнопок в меню
День добрый. Не могу найти решение вопроса, а из-за хронического недосыпа разумные варианты не приходят в голову.
Есть меню подобной структуры: <ul> <li><a href="#">1</a></li> <li><a href="#">2</a></li> <li><a href="#">3</a></li> </ul> Нужно сделать так, чтоб в меню отображались только две кнопки. Если мы находимся на вкладке "1", то видим кнопки "2" и "3". Если на вкладке "2", то "1" и "3". И если на вкладке "3", то "1" и "2". Помогите, пожалуйста, с решением или направьте в правильное русло. |
Примерно так должно работать:
<ul>
<li><a href="#" id="h1" style="display: none;">1</a></li>
<li><a href="#" id="h2">2</a></li>
<li><a href="#" id="h3">3</a></li>
<li><a href="#" id="h4">4</a></li>
<li><a href="#" id="h5">5</a></li>
</ul>
<script>
document.getElementById('h1').onclick = function() {
document.getElementById('h1').style.display = 'none';
document.getElementById('h2').style.display = '';
document.getElementById('h3').style.display = '';
document.getElementById('h4').style.display = '';
document.getElementById('h5').style.display = ''
}
document.getElementById('h2').onclick = function() {
document.getElementById('h1').style.display = '';
document.getElementById('h2').style.display = 'none';
document.getElementById('h3').style.display = '';
document.getElementById('h4').style.display = '';
document.getElementById('h5').style.display = ''
}
document.getElementById('h3').onclick = function() {
document.getElementById('h1').style.display = '';
document.getElementById('h2').style.display = '';
document.getElementById('h3').style.display = 'none';
document.getElementById('h4').style.display = '';
document.getElementById('h5').style.display = ''
}
document.getElementById('h4').onclick = function() {
document.getElementById('h1').style.display = '';
document.getElementById('h2').style.display = '';
document.getElementById('h3').style.display = '';
document.getElementById('h4').style.display = 'none';
document.getElementById('h5').style.display = ''
}
document.getElementById('h5').onclick = function() {
document.getElementById('h1').style.display = '';
document.getElementById('h2').style.display = '';
document.getElementById('h3').style.display = '';
document.getElementById('h4').style.display = '';
document.getElementById('h5').style.display = 'none'
}
</script>
Можно ли как-то сократить скрипт? |
Можно!
|
добавляете 1-му пункту класс Актив.
При клике на li проверяйте наличие следующего li и если он есть - показывайте его (смотрите есть ли у него класс актив, если да - то надо скрыть следующий за активом элемент (опять же при условии его наличия), если его нет - то скрыть первый элемент). Если следующего li нет - показываем первый. С предудущими элементами почти то-же самое. Код простой, но нудный. Не будет получаться - пишите. Читайте про .next() .prev() jQuery Проверить наличие следующего элемента: $(this).next().length |
Цитата:
<!DOCTYPE html>
<html>
<head>
<!--
<script src="http://code.jquery.com/jquery-latest.js"></script>
<link rel="stylesheet" type="text/css" href="tmp.css" />
-->
<style type="text/css">
.off {
display: none;
}
</style>
<script type="text/javascript">
function off(Id) {
var o=document.getElementById(Id);
var oa=document.getElementById('menu');
oa=oa.getElementsByTagName('a');
var i;
for (i=0; i<oa.length; i++) {
oa[i].className=(oa[i]==o)? 'off': '';
};
};
</script>
</head>
<body>
<ul id='menu'>
<li><a href="#" id="h1" class='off'>1</a></li>
<li><a href="#" id="h2">2</a></li>
<li><a href="#" id="h3">3</a></li>
<li><a href="#" id="h4">4</a></li>
<li><a href="#" id="h5">5</a></li>
</ul>
<script type="text/javascript">
var o=document.getElementById('menu'),
i;
o=o.getElementsByTagName('li');
for (i=0; i<o.length; i++) {
o[i].onclick=(function (Id) {
return function () {
off(Id);
}
})('h'+(i+1));
};
</script>
</body>
</html>
|
Цитата:
|
Сам пришел к другому, более короткому, но менее универсальному и неудобному варианту.
Буду вникать, спасибо за ответы! |
ksa,
Я описывал несколько другой функционал. В моем варианте отображаются 2 соседа от активного элемента (предыдущий и следующий) как написано тут: Цитата:
<!DOCTYPE html>
<html>
<head>
<script src="http://code.jquery.com/jquery-latest.js"></script>
<link rel="stylesheet" type="text/css" href="tmp.css" />
<style type="text/css">
.off {
display: none;
}
</style>
<script type="text/javascript">
function off(Id) {
var o=document.getElementById(Id);
var oa=document.getElementById('menu');
oa=oa.getElementsByTagName('a');
var i;
for (i=0; i<oa.length; i++) {
oa[i].className=(oa[i]==o)? 'off': '';
};
};
</script>
</head>
<body>
<ul id='menu'>
<li><a href="#" id="h1" class='off'>1</a></li>
<li><a href="#" id="h2">2</a></li>
<li><a href="#" id="h3">3</a></li>
<li><a href="#" id="h4">4</a></li>
<li><a href="#" id="h5">5</a></li>
</ul>
<script type="text/javascript">
$('ul').find('li').first().find('a').addClass('active');
$('li').click(function () {
$('.active').show().removeClass('active');
$(this).find('a').addClass('active').hide();
})
</script>
</body>
</html>
|
Цитата:
Цитата:
<!DOCTYPE html>
<html>
<head>
<script src="http://code.jquery.com/jquery-latest.js"></script>
<!--
<link rel="stylesheet" type="text/css" href="tmp.css" />
-->
<style type="text/css">
.off {
display: none;
}
</style>
<script type="text/javascript">
$(document).ready(function (){
$('#menu a').click(function (){
$('#menu a').removeClass('off');
$(this).addClass('off');
});
});
</script>
</head>
<body>
<ul id='menu'>
<li><a href="#" id="h1" class='off'>1</a></li>
<li><a href="#" id="h2">2</a></li>
<li><a href="#" id="h3">3</a></li>
<li><a href="#" id="h4">4</a></li>
<li><a href="#" id="h5">5</a></li>
</ul>
</body>
</html>
|
:agree:
|
| Часовой пояс GMT +3, время: 00:53. |