Проверьте, имеет ли ссылка меню подменю JavaScript - PullRequest
1 голос
/ 15 февраля 2012

Я пытаюсь запустить какой-нибудь javascript (toggleClass), только если по нажатой ссылке меню есть подменю. Это возможно? Заранее спасибо за помощь.

$('#nav a').click(function () {
    if (???) {
        $(this).toggleClass('sf-js-enabled');
    }
});

Ответы [ 3 ]

1 голос
/ 15 февраля 2012

Используйте селектор has:

$('#nav a:has(.submenu)').click(function () {
        $(this).toggleClass('sf-js-enabled');
    });

Таким образом, jQuery будет проходить через DOM только один раз, а не при каждом щелчке, как во всех других ответах, которые вы получили.

has документы :

Описание: выбирает элементы, которые содержат хотя бы один элемент, соответствующий указанному селектору.

1 голос
/ 15 февраля 2012
$('#nav a').click(function () {
    // Proceed only if children with your submenu class are present
    if ($(this).find('.submenuClass').length > 0) {
        $(this).toggleClass('sf-js-enabled');
    }
})
0 голосов
/ 15 февраля 2012

Попробуйте это.

$('#nav a').click(function () {
    if ($(this).find('submenuSelector').length) {
        $(this).toggleClass('sf-js-enabled');
    }
})

В качестве альтернативы вы можете использовать метод has(selector), который сокращает набор совпадающих элементов до тех, у которых есть потомок, соответствующий селектору или элементу DOM.

$('#nav a').click(function () {
    //Do other suff here

    if ($(this).has('submenuSelector').length) {
        $(this).toggleClass('sf-js-enabled');
    }
})
...