Comment sélectionner l'étiquette pour = "XYZ" en CSS?

256

HTML:

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

CSS:

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

Je souhaite sélectionner le libellé en fonction de l'attribut «pour» pour effectuer des modifications de mise en page.

Kyle
la source

Réponses:

496

Le sélecteur serait label[for=email], donc en CSS:

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

... ou en JavaScript en utilisant le DOM:

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

... ou en JavaScript avec jQuery:

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

C'est un sélecteur d'attribut . Notez que certains navigateurs (versions d'IE <8, par exemple) peuvent ne pas prendre en charge les sélecteurs d'attributs, mais les plus récents le font. Pour prendre en charge les anciens navigateurs comme IE6 et IE7, vous devez malheureusement utiliser une classe (enfin, ou une autre manière structurelle).

(Je suppose que le modèle {t _your_email}remplira un champ avec id="email". Sinon, utilisez plutôt une classe.)

Notez que si la valeur de l'attribut que vous sélectionnez ne correspond pas aux règles d'un identifiant CSS (par exemple, s'il contient des espaces ou des crochets, ou commence par un chiffre, etc.), vous avez besoin de guillemets autour du valeur:

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

Il peut s'agir de guillemets simples ou doubles .

TJ Crowder
la source
Je vais le changer en classe pour ie7 en utilisant des commentaires conditionnels alors, merci pour la bonne réponse!
Kyle
Et maintenant, les documents jQuery disent que vous n'avez pas besoin des guillemets pour les mots simples, donc cela correspond à nouveau à CSS (à cet égard).
TJ Crowder
6
Pour éviter toute confusion pour tout le monde (je viens de l'avoir moi-même), il ne doit pas y avoir d'espace entre labelet[for=email]
paddotk
IE8 prend en charge les sélecteurs d'attributs tant que la page a un <! DOCTYPE> déclaré.
ilinamorato
1
@TJCrowder je comprends. Je clarifiais seulement ce point en le testant.
ilinamorato du
0

Si le contenu est une variable, il sera nécessaire de le concaténer avec des guillemets. Ça a marché pour moi. Comme ça:

itemSelected (id: number) {
    console.log ('label contains', document.querySelector ("label [for = '" + id + "']"));
}
Julio Cesar Brito Gomes
la source