2010-07-07 11 views
29

jaki jest właściwy sposób na określenie, czy obiekt ma jedną klasę LUB inny? Następujące informacje są wyraźnie błędne.jQuery określić, czy ul ma klasę LUB inny

if ($('#menu-item-49').hasClass('current-menu-item' || 'current-menu-parent')) { 
    $('ul.sub-menu ').css('display', 'block'); 
} 

Dzięki!

Odpowiedz

0

Oto co masz na myśli:

var menuItem49 = $('#menu-item-49'); 
if (menuItem49.hasClass('current-menu-item') || menuItem49.hasClass('current-menu-parent')) { 
    // ... 
} 
+0

Tak, to jest! dzięki źle sprawdzić odpowiedź w nieco ... – nwindham

65

Można użyć is zamiast?

if ($('#menu-item-49').is('.current-menu-item, .current-menu-parent')) { 
    $('ul.sub-menu ').css('display', 'block'); 
} 

Sprawdź aktualną dopasowany zestaw elementów przeciwko selektora i powrócić prawdziwe, jeśli co najmniej jeden z tych elementów pasuje selektora.

Beats konieczności korzystania z wielu hasClass zapytania, który jest alternatywą:

if ($('#menu-item-49').hasClass('current-menu-item') || 
    $('#menu-item-49').hasClass('current-menu-parent')) { 
    $('ul.sub-menu ').css('display', 'block'); 
} 
+0

To miło! – BalusC

+0

Pewnie! Lepsze niż pisanie hasClass() || hasClass || hasClass w kółko. – GenericTypeTea

+0

+1 bardzo ładne. Napisałeś to zanim zrobiłem :) –

0

tak blisko!

Spróbuj:

if ($('#menu-item-49').hasClass('current-menu-item') || $('#menu-item-49').hasClass('current-menu-parent')) { 
    $('ul.sub-menu ').css('display', 'block'); 
} 
1
if ($('#menu-item-49').hasClass('current-menu-item') || $('#menu-item-49').hasClass('current-menu-parent')) { 
    $('ul.sub-menu ').css('display', 'block'); 
} 

Czy próbowałeś następujące?

2

Nie można używać operatora || (lub) w zakresie hasClass. Spróbuj tego:

if ($('#menu-item-49').hasClass('current-menu-item') || 
    $('#menu-item-49').hasClass('current-menu-parent')) { 
    $('ul.sub-menu ').css('display', 'block'); 
} 

Albo można to zrobić, jeśli to zbyt rozwlekły:

var $menuItem = $('#menu-item-49'); 
if ($menuItem.hasClass('current-menu-item') || 
    $menuItem.hasClass('current-menu-parent')) { 
    $('ul.sub-menu ').css('display', 'block'); 
} 

Albo jeszcze lepiej:

var $menuItem = $('#menu-item-49'); 
if ($menuItem.is('.current-menu-item, .current-menu-parent')) { 
    $('ul.sub-menu ').css('display', 'block'); 
} 
+0

W twoim ostatnia wersja, czy przecinek nie powinien znajdować się w cudzysłowie? '.current-menu-item, .current-menu-parent'' Jestem całkiem pewny' is() 'akceptuje tylko 1 argument, ale druga odpowiedź z tym rozwiązaniem zrobiła to samo, więc teraz zaczynam wątpić w siebie. : o) – user113716

+0

Ugh, moje złe. Masz rację! Naprawię to. –

0

Czy to tak zamiast, oddzielając je w dwóch bitów:

if ($('#menu-item-49').hasClass('current-menu-item') || $('#menu-item-49').hasClass('current-menu-parent')){ 
    $('ul.sub-menu ').css('display', 'block'); 
} 

Mam nadzieję, że to pomoże

1

Można również użyć .is() celu sprawdzenia każdej początku klasy z current-menu- za pomocą:

if ($('#menu-item-49').is('[class]^="current-menu-"')) { 
    //49 is the current menu! 
} 

Więcej selektorów atrybutów jak ^= można znaleźć here.

+0

Wystąpił problem z tym fragmentem, składniowo. Powinien raczej być: jeśli ($ ('# menu-item-49'). Jest ('[class^= "current-menu-"]')) { // 49 jest bieżącym menu! } –

Powiązane problemy