Как скрыть div с ul с определенным идентификатором, используя jQuery?

0

Я пытаюсь скрыть любой <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 &amp; 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/

  • 3
    id должны быть уникальными
  • 0
    В вашем javascript вы скрываете ярлык, где, я думаю, вы хотите скрыть UL, который находится под определенным ярлыком, а не сам ярлык.
Показать ещё 6 комментариев
Теги:

3 ответа

1
Лучший ответ

Обсуждения о недостатках числовых идентификаторов в сторону...

Чтение между строками, я думаю, вы хотели что-то вроде этого (переключает UL, связанный с помеченным div):

JSFiddle: http://jsfiddle.net/TrueBlueAussie/27Wmm/1/

$(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;
}

JSFiddle: http://jsfiddle.net/TrueBlueAussie/27Wmm/3/

Обновить

Если вы хотите, чтобы у вас было определенное поведение при запуске, вы можете разделить бит, который выполняет эту работу, и вызвать его при запуске.

JSFiddle: http://jsfiddle.net/TrueBlueAussie/27Wmm/4/

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());
});

JSFiddle: http://jsfiddle.net/TrueBlueAussie/27Wmm/5/

Это должно быть много, чтобы играть.

  • 0
    Это не тот эффект, который я искал. У меня уже есть это работает в реальном коде. Что у меня здесь? Wildernessterritory.com/territory-map Я пытаюсь сделать так, чтобы при прохождении этой карты переменную get все пункты меню, кроме достопримечательностей, не были видны.
  • 0
    Ну, это рассказывает другую историю :) Так что просто держите вызов showThis($('#attractions').prev()); и бросить другую часть. Рухнет все кроме аттракционов
Показать ещё 4 комментария
0

Попробуйте что-то вроде этого:

if($('.sortCat2').attr('id') == 'attractions'){
$('.sortCat2').css({'display': 'none'});
}

Рабочая скрипка: http://jsfiddle.net/robertrozas/27Wmm/2/

0

Я не уверен, как вы ожидаете, что это сработает, но я изменил ваш 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 &amp; 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'});
    }
});
  • 0
    Я не могу изменить макет HTML. Элемент div - это область, похожая на заголовок, и я просто хочу, чтобы она исчезла, если ul - это достопримечательности.
  • 0
    Я полагаю, вы обнаружили, что это уже не может сработать? UL - это братья и сестры DIV, а не дети.
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню