Я пытаюсь скрыть любой <div>
который не имеет <ul>
с определенным идентификатором. У меня есть скрипка, где я пытаюсь это сделать, но она не работает так, как я ожидал. Я могу заставить их скрыться, но тот, который я хочу продолжать показывать, не работает.
HTML
<ul id="accordion">
<li>
<div style="background-color: rgb(109, 129, 27);" class="expand" title="Click to Expand">Zoos</div>
<ul class="sortCat1" id="zoo">
<li id="1"><a href="#">1</a></li>
<li id="2"><a href="#">2</a></li>
<li id="3"><a href="#">3</a></li>
</ul>
</li>
<li>
<div style="background-color: rgb(109, 129, 27);" title="Click to Expand" class="expand">Attractions</div>
<ul class="sortCat2" id="attractions">
<li id="1"><a href="#">1</a></li>
<li id="2"><a href="#">2</a></li>
<li id="3"><a href="#">3</a></li>
</ul>
</li>
<li>
<div style="background-color: rgb(109, 129, 27);" title="Click to Expand" class="expand">Dining & Shopping</div>
<ul class="sortCat3" id="dinShop">
<li id="1"><a href="#">1</a></li>
<li id="2"><a href="#">2</a></li>
<li id="3"><a href="#">3</a></li>
</ul>
</li>
</ul>
Javascript
if($('.expand ul').id == 'attractions'){
$(this).css({'display': 'block'});
}else{
$('.expand').css({'display': 'none'});
}
JSFiddle http://jsfiddle.net/27Wmm/
Обсуждения о недостатках числовых идентификаторов в сторону...
Чтение между строками, я думаю, вы хотели что-то вроде этого (переключает UL, связанный с помеченным div):
$(function () {
$('#accordion').on('click', '.expand', function () {
var $this = $(this);
// Show the sibling of the clicked div
$this.next().css({
'display': 'inherit'
});
// Now hide all others sibling of the non-clicked divs
$('.expand').not($this).next().css({
'display': 'none'
});
});
});
При любом типе меню вы обычно хотели бы избежать какого-либо жесткого кодирования выбранных элементов и управлять им нажатием на элемент (и другие связанные элементы не были нажаты).
Вероятно, вы также захотите запустить только один (если он есть), не скомпенсированный, что означает только первоначальный стиль на них. например, в CSS
#accordion ul {
display: none;
}
Если вы хотите, чтобы у вас было определенное поведение при запуске, вы можете разделить бит, который выполняет эту работу, и вызвать его при запуске.
var showThis = function ($this) {
// Show the sibling of the clicked div
$this.next().css({
'display': 'inherit'
});
// Now hide all others
$('.expand').not($this).next().css({
'display': 'none'
});
}
$(function () {
$('#accordion').on('click', '.expand', function () {
showThis($(this));
});
showThis($('#attractions').prev());
});
Согласно комментариям, желаемое поведение - просто показать притяжение DIV и ассоциированный UL. Если бы это было так (я все еще сомневаюсь), вы бы изменили это на следующее:
var showThis = function ($this) {
// Show the div, then show the sibling of the clicked div
$this.css({
'display': 'inherit'
}).next().css({
'display': 'inherit'
});
// Now hide all other divs and ULs
$('.expand').not($this).css({
'display': 'none'
}).next().css({
'display': 'none'
});
}
$(function () {
showThis($('#attractions').prev());
});
Это должно быть много, чтобы играть.
showThis($('#attractions').prev());
и бросить другую часть. Рухнет все кроме аттракционов
Попробуйте что-то вроде этого:
if($('.sortCat2').attr('id') == 'attractions'){
$('.sortCat2').css({'display': 'none'});
}
Рабочая скрипка: http://jsfiddle.net/robertrozas/27Wmm/2/
Я не уверен, как вы ожидаете, что это сработает, но я изменил ваш HTML и JS, чтобы получить то, что, как я думаю, работает так, как вы хотите:
<ul id="accordion">
<li>
<div style="background-color: rgb(109, 129, 27);" class="expand" title="Click to Expand">Zoos
<ul class="sortCat1" id="zoo">
<li id="1"><a href="#">1</a></li>
<li id="2"><a href="#">2</a></li>
<li id="3"><a href="#">3</a></li>
</ul>
</div>
</li>
<li>
<div style="background-color: rgb(109, 129, 27);" title="Click to Expand" class="expand">Attractions
<ul class="sortCat2" id="attractions">
<li id="1"><a href="#">1</a></li>
<li id="2"><a href="#">2</a></li>
<li id="3"><a href="#">3</a></li>
</ul>
</div>
</li>
<li>
<div style="background-color: rgb(109, 129, 27);" title="Click to Expand" class="expand">Dining & Shopping
<ul class="sortCat3" id="dinShop">
<li id="1"><a href="#">1</a></li>
<li id="2"><a href="#">2</a></li>
<li id="3"><a href="#">3</a></li>
</ul>
</div>
</li>
$(".expand").each(function()
{
if($('ul', this).attr('id') != "attractions")
{
$(this).css({'display': 'none'});
}
});
id
должны быть уникальными