Specifica più selettori di attributo nei CSS


296

Qual è la sintassi per fare qualcosa del genere:

input[name="Sex" AND value="M"]

Fondamentalmente, voglio selezionare l' inputelemento che ha l'attributo name="Sex"e l'attributo value="M":

<input type="radio" name="Sex" value="M" />

Elementi come i seguenti non devono essere selezionati:

<input type="radio" name="Sex" value="F" />

Risposte:


437

Semplice input[name=Sex][value=M]sarebbe abbastanza carino. Ed è in realtà ben descritto nel documento standard :

Selettori di attributi multipli possono essere usati per riferirsi a più attributi di un elemento, o anche più volte allo stesso attributo.

Qui, il selettore corrisponde a tutti gli elementi SPAN il cui attributo "ciao" ha esattamente il valore "Cleveland" e il cui attributo "addio" ha esattamente il valore "Columbus":

span[hello="Cleveland"][goodbye="Columbus"] { color: blue; }

Come nota a margine, è necessario utilizzare le virgolette attorno a un valore di attributo solo se questo valore non è un identificatore valido.

JSFiddle Demo


8
c'è qualcosa del genere, ma OR invece di AND?
törzsmókus,

4
Intendi altro che ,(virgola)?
raina77ow,

2
non puoi scrivere span [hello = "Cleveland"], [arrivederci = "Columbus"] ma devi ripetere una (possibilmente lunga) parte.
törzsmókus,

Devi davvero (almeno per il momento), a meno che tu non usi i preprocessori. Consultare questa discussione per maggiori dettagli.
raina77ow,

67

Per concatenare è:

input[name="Sex"][value="M"] {}

E per prendere l'unione è:

input[name="Sex"], input[value="M"] {}

31

Concatena i selettori degli attributi:

input[name="Sex"][value="M"]

1
Vale la pena notare che almeno uno dei valori degli attributi deve essere citato. Ciò fallirebbe se lo scrivessi input[name=Sex][value=M]anche se sarebbe valido avere un selettore con un solo attributo che non usasse le virgolette.
Stevec,

1
@stevec Volevi dire questo sulla risposta accettata? Ho citato i valori nella mia risposta. Inoltre non penso sia vero. Hai bisogno di virgolette se la risposta contiene determinati caratteri ma non in questo esempio. mothereff.in/unquoted-attributes
Dennis

Ho aggiunto quella nota perché l'ho provata in diversi browser senza virgolette e non è riuscita in tutto. Credo che il problema sia che senza virgolette su almeno uno, è ambiguo perché potrebbe essere interpretato come un input il cui nome èSex][value=M
Stevec

Le parentesi @stevec non sono valide negli attributi non quotati per quel motivo esatto. Questo esempio funziona in Firefox e Chrome: jsfiddle.net/o2abekdh/3
Dennis

4

Solo per aggiungere che non ci dovrebbe essere spazio tra il selettore e la staffa di apertura.

td[someclass] 

funzionerà. Ma

td [someclass] 

no.


-6
[class*="test"],[class="second"] {
background: #ffff00;
}
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.