Come selezionare l'etichetta per = "XYZ" in CSS?


266

HTML:

<label for="email">{t _your_email}:</label>

CSS:

label {
  display: block;
  width: 156px;
  cursor: pointer;
  padding-right: 6px;
  padding-bottom: 1px;
}

Desidero selezionare l'etichetta in base all'attributo "for" per apportare modifiche al layout.

Risposte:


509

Il selettore sarebbe label[for=email], quindi in CSS:

label[for=email]
{
    /* ...definitions here... */
}

... o in JavaScript utilizzando il DOM:

var element = document.querySelector("label[for=email]");

... o in JavaScript utilizzando jQuery:

var element = $("label[for=email]");

È un selettore di attributi . Si noti che alcuni browser (versioni di IE <8, ad esempio) potrebbero non supportare i selettori di attributi, ma quelli più recenti sì. Per supportare browser meno recenti come IE6 e IE7, dovresti usare una classe (beh, o qualche altro modo strutturale), purtroppo.

(Presumo che il modello {t _your_email}riempirà un campo con id="email". In caso contrario, utilizza invece una classe.)

Tieni presente che se il valore dell'attributo che stai selezionando non si adatta alle regole per un identificatore CSS (ad esempio, se contiene spazi o parentesi, o inizia con una cifra, ecc.), Hai bisogno di virgolette intorno al valore:

label[for="field[]"]
{
    /* ...definitions here... */
}

Possono essere virgolette singole o doppie .


Lo cambierò in una classe per ie7 usando i commenti conditiona quindi, grazie per l'ottima risposta!
Kyle

E ora i documenti jQuery dicono che non hai bisogno delle virgolette per singole parole, quindi corrisponde di nuovo a CSS (a questo proposito).
TJ Crowder

6
Per evitare confusione a tutti (l'ho appena avuto io stesso), non deve esserci spazio tra labele[for=email]
paddotk

1
@TJCrowder ho capito. Stavo solo chiarendo il punto appena l'ho testato.
ilinamorato

1
Aggiornamento per JavaScript moderno: document.querySelector('label[for="email"]')o document.querySelectorAll('label[for="email"]').
Manngo

0

Se il contenuto è una variabile, sarà necessario concatenarlo tra virgolette. Ha funzionato per me. Come questo:

itemSelected (id: number) {
    console.log ('label contiene', document.querySelector ("label [for = '" + id + "']"));
}

0

Se segue label immediatamente un inputelemento specificato :

input#example + label { ... }
input:checked + label { ... }
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.