2012-03-21 9 views
5

Ho un listener per eventi di clic da cui ho bisogno di escludere alcuni elementi.Posso creare un selettore con più elementi usando Jquery più vicino()

In questo momento la mia lista è in crescita, quindi sto cercando un modo migliore per "raggruppare" più elementi in un selettore.

Questo è quello che ho:

$(document).on('click tap', function(event) {    
    if ($(event.target).closest('div:jqmData(panel="popover")').length > 0 || 
     $(event.target).closest('div.pop_menuBox').length > 0 || 
     $(event.target).closest('.toggle_popover').length > 0) || 
     $(event.target).closest('.ui-selectmenu').length > 0 { 
      return; 
    } 
    // do stuff 
}); 

C'è un modo migliore per escludere questi elementi?

Grazie per l'aiuto!

+0

puoi aggiornare l'HTML su cui jquery funziona? –

+0

Non puoi semplicemente dare ad ogni elemento che vuoi controllare la stessa classe? – Deadlykipper

+0

non sai cosa intendi? Sto usando Jquery 1.7.1 (e Jquery Mobile) – frequent

risposta

18

È possibile specificare selettori CSS, il che significa: è possibile utilizzare la virgola per specificare due o più selettori:

if($(event.target).closest('div:jqmData(panel="popover"), div.pop_menuBox, .toggle_popover, .ui-selectmenu').length > 0) { 
    return; 
} 
2

Utilizzare una virgola.

if ($(event.target) 
    .closest('div:jqmData(panel="popover"), div.pop_menuBox, .toggle_popover, .ui-selectmenu').length > 0) { 
    return; 
} 
0

Secondo la documentazione jQuery è possibile fornire più di un selettore per più vicino: http://api.jquery.com/closest/

+0

sì, ho letto anche questo. Ero un po 'insicuro sul fatto che "Questa firma (solo!) È deprecata da jQuery 1.7 Questo metodo è pensato principalmente per essere usato internamente o dagli autori di plugin." sulla pagina Jquery dovrebbe significare? Cos'è la "firma"? – frequent

+0

Grazie per avermelo fatto notare. Per te funziona? Sono anche curioso di sapere perché jQuery mette i selettori in un array nell'esempio: 'var close = $ (" li: first "). Closest ([" ul "," body "]);' –

+0

Ok. Ho appena provato. Se faccio un normale selettore con la virgola funziona. Presumo che la cosa dell'array non sia più supportata. Lo testerò più tardi – frequent

Problemi correlati