2009-08-03 13 views
48

Come posso selezionare tutti gli elementi che hanno una specifica proprietà CSS applicata, usando jQuery? Ad esempio:Seleziona tutti gli elementi che hanno un CSS specifico, usando jQuery

.Title 
{ 
    color:red; 
    rounded:true; 
} 

.Caption 
{ 
    color:black; 
    rounded:true; 
} 

Come selezionare per proprietà denominata "arrotondato"?

Il nome della classe CSS è molto flessibile.

$(".Title").corner(); 
$(".Caption").corner(); 

Come sostituire questa operazione con una sola operazione. Forse qualcosa di simile:

$(".*->rounded").corner(); 

C'è un modo migliore per farlo?

+11

Ehi, gente: * Si prega di leggere la domanda * prima di rispondere! Questo povero ragazzo ha ottenuto quattro risposte su cinque completamente sbagliate. – Boldewyn

risposta

30

Non è possibile (utilizzando un selettore CSS) selezionare gli elementi in base alle proprietà CSS che sono state applicate a loro.

Se si desidera eseguire questa operazione manualmente, è possibile selezionare ogni elemento del documento, scorrere su di essi e controllare il valore calcolato della proprietà a cui si è interessati (probabilmente con le proprietà CSS effettive, non quelli inventati come rounded). Sarebbe anche lento.

Aggiornamento in risposta alle modifiche - group selectors:

$(".Title, .Caption").corner(); 
+1

+1 per la sola risposta fino ad ora risolvendo la domanda :-) – Boldewyn

+0

@Quentin: questa risposta è corretta? Vedi http://stackoverflow.com/questions/10651508 e http://api.jquery.com/css/ e http://meta.stackexchange.com/questions/132958/question-closure-incorrect#comment368460_132958 –

+1

@RobertHarvey - Sì. Si noti che al paragrafo 1, ne cerco l'impossibilità con "usando un selettore CSS". Il paragrafo 2 descrive una soluzione. Il link alla domanda ha un numero di risposte, ma quelle con punteggi di voto positivi sono esempi del lavoro che ho descritto. – Quentin

54

Questa è una discussione di due anni, ma è stato comunque utile per me in modo che possa essere utile ad altri, forse. Ecco quello che ho finito per fare:

var x = $('.myselector').filter(function() { 
    return this.style.some_prop == 'whatever' 
}); 

non come succinta come vorrei, ma non ho mai avuto bisogno di qualcosa di simile solo che adesso, e non è molto efficiente per uso generale in ogni caso, come la vedo io.

25

Grazie, Bijou. Ho usato la vostra soluzione, ma usato il jQuery CSS invece di puro javascript, in questo modo:

var x = $('*').filter(function() { 
    return $(this).css('font-family').toLowerCase().indexOf('futura') > -1 
}) 

Questo esempio selezionare tutti gli elementi in cui il valore di attributo font-family contiene "Futura".

proprietà
+1

Sì, anche questo ha funzionato per me. Ho salvato [un jsfiddle funzionante] (http://jsfiddle.net/raduluchian/rs37d/3/) di esso, per riferimento futuro. –

+3

mi hai appena salvato dalla mia mente lunga 3 ore .. +1 per quello –

0

personalizzati CSS non sono ereditati, quindi devono essere applicati direttamente a ciascun elemento (anche se si utilizza js aggiungere dinamicamente le proprietà, si dovrebbe fare con l'aggiunta di una classe), quindi ...

CSS

.Title 
{ 
    color:red; 
} 

.Caption 
{ 
    color:black; 
} 

HTML

non è necessario definire un arrotondato: vera proprietà a tutti. Basta usare la presenza della classe 'arrotondato':

<div class='Title Rounded'><h1>Title</h1></div> 
<div class='Caption Rounded'>Caption</div> 

JS

jQuery('.Rounded').corner(); 
+0

Questo in nessun modo risponde alla domanda. –

12

Simile come Bijou di.Solo un po valorizzazione bit:

$('[class]').filter(function() { 
    return $(this).css('your css property') == 'the expected value'; 
    } 
).corner(); 

penso utilizzando $ ('[classe]') è migliore:

  • nessuna necessità di codificare duro il selettore (s)
  • non controllerà tutti gli elementi HTML uno per uno.

Ecco uno example.

+0

Questa ottimizzazione non è abbastanza generica se si hanno selettori come 'div.special> span> a'. –

0

Ecco un ambiente pulito facile da capire soluzione:

// find elements with jQuery with a specific CSS, then execute an action 
$('.dom-class').each(function(index, el) { 
    if ($(this).css('property') == 'value') { 
     $(this).doThingsHere(); 
    } 
}); 

Questa soluzione è diverso perché non usa angolo, filtro o di ritorno. È fatto intenzionalmente per un pubblico più ampio di utenti.

Cose da sostituire:

  1. sostituire ".dom-class" con il selettore.
  2. Sostituisci proprietà CSS e valore con quello che stai cercando.
  3. Sostituire "doThingsHere()" con quello che si desidera eseguire su quell'elemento trovato .
Problemi correlati