2010-07-07 17 views
29

lo que es el camino correcto para determinar si un objeto tiene una clase u otra? El siguiente es appearantly equivocado ..jQuery determinar si ul tiene clase u otra

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

Gracias!

Respuesta

0

Lo siguiente es lo que usted tiene en mente:

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

sí eso es todo! gracias enferma comprobar su respuesta en un poco ... – nwindham

65

usted podría utilizar is en su lugar?

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

Controlar la corriente conjunto combinado de elementos contra un selector y volver cierto si al menos uno de estos elementos coincide con el selector.

Golpes tener que utilizar múltiples consultas hasClass, que es la alternativa:

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

Eso es un buen uno! – BalusC

+0

¡Claro! Mejor que escribir hasClass() || hasClass || hasClass una y otra vez. – GenericTypeTea

+0

+1 muy agradable. Usted envió antes que yo :) –

0

tan cerca!

Probar:

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'); 
} 

¿Ha intentado el siguiente?

2

No se puede utilizar el operador || (o) dentro de hasClass. Prueba esto:

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

O puede hacer esto si eso es demasiado detallado:

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

O aún mejor:

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

En su última versión, ¿no debería estar la coma dentro de las comillas? ''.corrent-menu-item, .current-menu-parent'' Estoy bastante seguro de que' is() 'solo acepta 1 argumento, pero la otra respuesta con esta solución hizo lo mismo, entonces ahora estoy comenzando dudar de mí mismo : o) – user113716

+0

Uf, mi mal. ¡Tienes razón! Arreglará esto –

0

hacerlo de esta manera en su lugar, separándolo en dos trozos:

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

Espero que esto te ayude

1

También puede utilizar .is() para comprobar cualquier principio clase con current-menu- mediante el uso de:

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

Más selectores de atributos como ^= pueden ser encontrados here.

+0

Hay un problema con este fragmento, en cuanto a la sintaxis. Más bien debería ser: if ($ ('# menu-item-49'). Is ('[class^= "current-menu-"]')) { // 49 es el menú actual! } –

Cuestiones relacionadas