jQuery determinare se l’ul ha classe, O in un’altra

qual è il giusto modo per determinare se un oggetto ha una classe O di un altro?
Il seguente è appearantly sbagliato..

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

Grazie!

InformationsquelleAutor nwindham | 2010-07-07

 

7 Replies
  1. 68

    Si potrebbe utilizzare è invece?

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

    Controllare la corrente corrispondente set di
    elementi contro un selettore e ritorno
    true se almeno uno di questi elementi
    confronta il selettore.

    Meglio che dover utilizzare più hasClass query, che è l’alternativa:

    if ($('#menu-item-49').hasClass('current-menu-item') || 
        $('#menu-item-49').hasClass('current-menu-parent')) {
      $('ul.sub-menu ').css('display', 'block');
    }
    • Che piacevole!
    • Certo è! Meglio che scrivere hasClass() || hasClass || hasClass più e più volte.
    • +1 molto bello. Hai postato prima di me 🙂
    • +1 per il leggermente più elegante soluzione
    • Forse cercavi per inserire la virgola all’interno delle virgolette? '.current-menu-item, .current-menu-parent' Attualmente il secondo argomento viene ignorato.
    • Grazie per la macchia che!
    • un confronto di prestazioni per le prestazioni cosciente : jsperf è vs hasClass per più classi
    • Utilizzare classlist.contiene, anche per una migliore prestazione – jsperf.com/is-vs-hasclass-for-multiple-classes/6

  2. 2

    Non è possibile utilizzare il || (o) operatore all’interno di hasClass. Prova questo:

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

    O si può fare questo se è troppo prolisso:

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

    O meglio ancora:

    var $menuItem = $('#menu-item-49');
    if ($menuItem.is('.current-menu-item, .current-menu-parent')) {
      $('ul.sub-menu ').css('display', 'block');
    }
    • Nella tua ultima versione, non la virgola all’interno di virgolette? '.current-menu-item,.current-menu-parent' Sono abbastanza sicuro is() accetta solo 1 argomento, ma l’altra risposta a questa soluzione ha fatto la stessa cosa, così ora sto iniziando a dubitare di me stesso. :o)
    • Uffa, il mio male. Hai ragione! Risolverà questo.
  3. 1
    if ($('#menu-item-49').hasClass('current-menu-item') || $('#menu-item-49').hasClass('current-menu-parent') ) {
      $('ul.sub-menu ').css('display', 'block');
    }

    Hai provato il seguente?

  4. 1

    È inoltre possibile utilizzare .is() controllare per qualsiasi classe di inizio con current-menu- utilizzando:

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

    Più selettori di attributo come ^= può essere trovato qui.

    • C’è un problema con questo snippet di codice, la sintassi-saggio. Essa, invece, dovrebbe essere: if ( $(‘#menu-item-49’).è(‘[classe^=”current-menu-“]’) ) { //49 è il menu corrente! }
  5. 0

    Seguente è quello che hai in mente:

    var menuItem49 = $('#menu-item-49');
    if (menuItem49.hasClass('current-menu-item') || menuItem49.hasClass('current-menu-parent')) {
        //...
    }
    • sì thats it! grazie malato verificare la tua risposta un po’…
  6. 0

    Così vicino!

    Provare:

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

    Farlo come questo, invece, che la separa in due parti:

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

    Spero che questo ti aiuta

Lascia un commento