2015-02-24 3 views
0

Мне нужно проверить, какой класс имеет мой значок в следующем коде, если он присутствует.Если у ребенка есть класс

<li> 
    <a href="#">link 1</a> 
    <i class="fa fa-caret-down"></i> 
</li> 
<li> 
    <a href="#">link 2</a> 
</li> 

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

$(document).on('click', 'li a', function() { 
    if ($(this).find('i').hasClass('.fa-caret-down')) { 
     alert('down'); 
    } else if ($(this).find('i').hasClass('.fa-caret-up')) { 
     alert('up'); 
    } 
}); 

Что мне не хватает?

+10

Не используйте точку в 'метод hasClass':' .hasClass ('фа-каретки вверх') ' – antyrat

+0

@antyrat Вы правы. Виноват. – santa

ответ

2

Две ошибки.

  1. Вы должны использовать siblings() как find() поиск дочерних элементов.

  2. В hasClass() вы должны удалить dot . из класса.

$(document).on('click', 'li a', function() { 
 
    if ($(this).siblings('i').hasClass('fa-caret-down')) { 
 
    alert('down'); 
 
    } else if ($(this).siblings('i').hasClass('fa-caret-up')) { 
 
    alert('up'); 
 
    } 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script> 
 
<li> 
 
    <a href="#">link 1</a> 
 
    <i class="fa fa-caret-down"></i> 
 
</li> 
 
<li> 
 
    <a href="#">link 2</a> 
 
</li>

+0

Или еще лучше (для гибкости), '.closest ('li'). Find ('i'). HasClass ('fa-caret-up')' – Shai

+0

Еще лучше рассмотреть использование классов или атрибутов 'data-' или аналогично отмечать все 'li' как' open' или 'closed' (или что-то еще) - в противном случае ваш логин ** вашего веб-сайта ** зависит от того, какой значок (библиотека) вы используете - невелик. – Shai

2

Вы нацеливаете <a> и запрашиваете у него <i> (this). То, что вы хотите сделать, это попросить this.parent() и продолжить оттуда, как это:

$(document).on('click', 'li a', function() { 
    if ($(this).parent().find('i').hasClass('fa-caret-down')) { 
     alert('down'); 
    } else if ($(this).parent().find('i').hasClass('fa-caret-up')) { 
     alert('up'); 
    } 
}); 

PS: Вы можете также предназначаться Ли (вместо Li а).

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