2015-05-20 1 views
-2

Я не могу выбрать элемент на основе hasClass (" open ") или is (": visible).jQuery не может выбрать элемент с hasClass ("open") или is (": visible)

<ul class="menu"> 
    <li class="nav-item"> 
     <a href="about">About</a> 
     <div class="sub-nav-wrapper"> 
      <ul class="sub-menu"> 
       <li>...</li> 
      </ul> 
     </div> 
    <li>...</li> 
</ul> 
if ($('ul.menu li div').hasClass("open")) { 
    $(this).parent().children("a").css('background', '#666'); 
} 

При наведении на «О» ссылке, появится подменю ниже и класс добавляется в DIV с классом «суб-нав-обертки». Класс называется «открытым». Но когда пользователь перемещает курсор в область подменю, основное звено («О») теряет цвет наведения. Поэтому я пытаюсь вернуть его с помощью JS. Он не работает, и я также попробовал .is(":visible") и использовал предупреждение, чтобы проверить его, но предупреждение появлялось каждый раз, даже до того, как я что-то делал, только при загрузке страницы.

+0

Здесь происходит гораздо больше, чем вы показываете нам. –

+0

можете ли вы разместить jsfiddle с кодом в его нынешнем виде? – dbarnes

+1

'.hasClass' не является селектором. Он просто возвращает 'true' или' false' в зависимости от того, имеет ли выбранный элемент класс. Ничто в вашем коде не устанавливает 'this'. – Barmar

ответ

0

Есть несколько проблем здесь. Во-первых, такой оператор if будет выполнен только один раз, поэтому он не будет работать как слушатель. Во-вторых, .hasClass() просто возвращает логический элемент, а не элемент DOM, поэтому this в вашем заявлении if не так, как вы думаете.

Я бы справился с этим с помощью обработчика событий mouseover/mouseout. Попробуйте:

$('ul.menu li div').mouseover(function(e) { 
    $(this).parent().children("a").css('background', '#666'); 
}).mouseout(function(e) { 
    $(this).parent().children("a").css('background', '#original-bg-color'); 
}); 

Вам нужно будет заменить "#original-bg-color" с цветом фона по умолчанию для ваших навигационных ссылок. Надеюсь, это поможет!

0

Попытка добавить точку открыть ... -> hasClass ('открытый'.)

С уважением

+0

Код находится на сайте CMS, и есть модуль меню, управляющий добавлением и удалением класса «open». Ожидаемое поведение - когда пользователь набирает верхний элемент навигации (например, About), цвет bg ссылки желтый. И подменю показано ниже и имеет цвет bg для соответствия. но когда курсор перемещается вниз в подменю, чтобы выбрать ссылку, цвет наведения на родительском устройстве исчезает, поэтому желтого цвета позади верхней ссылки («О») нет. Я думаю, что комментарий о «этом» не установлен, имеет смысл, но я не знаю, как с этим бороться. - james 5 мин. Назад – james

+0

Даже поставив предупреждение в мой оператор if, не получится ли всплывающее окно предупреждения, если у div был класс «open?»? Он получает класс, зависающий над верхней ссылкой, но я никогда не получаю предупреждение. Таким образом, утверждение if должно быть правдой, но без предупреждения. – james

+0

попробуйте решить это с помощью чистого css? li.nav-item: hover a {color: purple} – themca

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