2015-11-12 3 views
2

У меня есть следующее меню:Отображение и скрытие списка элементы

<li style="display:none" class=".logged_in">Menu 1</li> 
<li style="display:none" class=".logged_in">Menu 2</li> 
<li style="display:show" class=".logged_out">Menu 3</li> 

Я использую Ajax для вызова конечной точки для проверки того, зарегистрирован пользователь или нет. Если вы входите в систему, я хочу скрыть меню 1 и 2 и показать меню 3, если нет, то верно обратное.

Я пытался скрыть и показать предметы, как, например:

$.find('.logged_out').css("display", "show"); 
$.find('.logged_in').css("display", "none"); 

Но это не похоже на работу.

Я также попытался несколько вариаций, таких как:

$(".logged_out").show(); 
$(".logged_in").show(); 

Любая идея правильный способ сделать это?

+2

Ну нет никакого «шоу» значения для отображения ... Проверьте свойства для отображения в mozil la developer Network и попробуйте это. –

+1

Действительно ли ваши классы начинаются с точек, или это что-то вроде goof? – isherwood

+0

:) Да, это была ошибка. tx – HappyCoder

ответ

3

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

Ваша проблема в том, что у вас есть точки в именах классов. Следовательно, ваш селектор jquery ищет элементы с классами logged_in и logged_out и не может их найти, потому что ваши классы называются .logged_in и .logged_out.

Изменение:

<li style="display:none" class=".logged_in">Menu 1</li> 
<li style="display:none" class=".logged_in">Menu 2</li> 
<li style="display:show" class=".logged_out">Menu 3</li> 

Чтобы (удалить точки в именах классов):

<li style="display:none" class="logged_in">Menu 1</li> 
<li style="display:none" class="logged_in">Menu 2</li> 
<li style="display:show" class="logged_out">Menu 3</li> 

Если вы хотите использовать точку, а затем проверить @BG101's answer

+1

Спасибо, что пропустил это! – HappyCoder

2

@ нэм-х ответ правильный. но если вы ИМЕЮТ иметь точку в имени класса, вы можете избежать точку следующим образом: -

$('.\\.logged_in').show()
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 

 
<div class=".logged_in" style="display:none">Hello</div>

1

Даже если элемент имеет class=".logged_in", вы все равно можете ориентировать элемент чтобы показать/скрыть, используя следующее выражение With селектора:

$('[class=".logged_in"]').hide(); 
$('[class=".logged_out"]').show(); 
+0

Проблема в том, что он будет нацелен на все элементы, которые ** содержат ** эти классы в именах классов. Например, он также скроет элементы с классом 'user_logged_in', так как он содержит класс' logged_in'. – nem035

+1

Этот подход вам не нужен 'with', он будет работать как этот' $ ('[class = ". Logged_in"]') '. – BenG

+0

@ nem, Bg101 - Спасибо, что указали это. Не думал так. – DinoMyte

Смежные вопросы