2010-06-21 8 views

risposta

34

Se stavi facendo questo con regex, l'espressione sarebbe semplicemente:

item-\d-top 

Qualora la \d indica ogni singola cifra (0..9), e gli altri personaggi non hanno alcun significato speciale (quindi sono trattati come letterali).

Tuttavia, jQuery al momento non ha un filtro regex (solo cose come start/end/contiene/etc) - quindi dovresti crearne uno tuo (che è possibile, ma se stavi considerando che dovresti fermati e considera cosa/perché stai filtrando e scopri se c'è un modo migliore per prima cosa).

Molto più semplice sarebbe creare una classe (come serg555 suggerisce), poiché è esattamente come si trattano questi elementi.

o (se non è possibile cambiare la marcatura per aggiungere la classe) e quindi i filtri esistenti, ampliando g.d.d.c's answer, potrei fare:

$('div[id^=item-][id$=-top]').hide() 

(Dal momento che si può avere più elementi per finire con solo 'top', né ora né in futuro, quindi è necessario essere più specifici per evitare involontariamente nascondere altre cose.)

+0

Grazie Peter/serg555. Ho provato sopra, ad es. e ha funzionato a meraviglia. È più un caso di curiosità, ma come suggerisce serg555, usare una classe sarebbe molto più semplice. Grazie ancora! –

+0

item- \ d-top non funziona. – podarok

+4

"non funziona" non funziona. –

6

Assegnerei loro qualche classe come item e quindi fare una ricerca con questa classe $(".item").

3

James Padolsey creato un meraviglioso filter che permette regex da utilizzare per la selezione.

jQuery.expr[':'].regex = function(elem, index, match) { 
    var matchParams = match[3].split(','), 
     validLabels = /^(data|css):/, 
     attr = { 
      method: matchParams[0].match(validLabels) ? 
         matchParams[0].split(':')[0] : 'attr', 
      property: matchParams.shift().replace(validLabels,'') 
     }, 
     regexFlags = 'ig', 
     regex = new RegExp(matchParams.join('').replace(/^s+|s+$/g,''), regexFlags); 
    return regex.test(jQuery(elem)[attr.method](attr.property)); 
} 

Ora è possibile utilizzare

$('div:regex(id,item-[0-9]-top)').hide() 
0

colpito un problema simile e c'è piaciuto/risposta di serg upvoted di creazione di classe, invece, ma poi perché stavo facendo più operazioni su tali elementi, Keyed Collections erano più adatto.

Problemi correlati