Disons que j'ai un formulaire html. Chaque input / select / textarea aura une correspondance <label>
avec l' for
attribut défini sur l'id de son compagnon. Dans ce cas, je sais que chaque entrée n'aura qu'une seule étiquette.
Étant donné un élément d'entrée en javascript - via un événement onkeyup, par exemple - quelle est la meilleure façon de trouver son étiquette associée?
javascript
html
label
Joel Coehoorn
la source
la source
function getInputLabel(thisElement) { var theAssociatedLabel,elementID; elementID = thisElement.id; theAssociatedLabel = thisElement.parentNode.querySelector("label[for='" + elementID + "']"); console.log('theAssociatedLabel.htmlFor: ' + theAssociatedLabel.htmlFor); theAssociatedLabel.style.backgroundColor = "green";//Set the label background color to green };
Réponses:
Tout d'abord, scannez la page à la recherche d'étiquettes et attribuez une référence à l'étiquette à partir de l'élément de formulaire réel:
Ensuite, vous pouvez simplement aller:
Pas besoin de tableau de recherche :)
la source
Si vous utilisez jQuery, vous pouvez faire quelque chose comme ça
Si vous n'utilisez pas jQuery, vous devrez rechercher l'étiquette. Voici une fonction qui prend l'élément comme argument et renvoie l'étiquette associée
la source
Il existe une
labels
propriété dans la norme HTML5 qui pointe vers des étiquettes associées à un élément d'entrée.Vous pouvez donc utiliser quelque chose comme ça (prise en charge de la
labels
propriété native mais avec une solution de secours pour récupérer les étiquettes au cas où le navigateur ne la prendrait pas en charge) ...Encore plus facile si vous utilisez jQuery ...
la source
Je suis un peu surpris que personne ne semble savoir que vous êtes parfaitement autorisé à faire:
Ce qui ne sera pas repris par l' une des réponses proposées, mais sera étiqueter correctement l'entrée.
Voici un code qui tient compte de ce cas:
Usage:
Quelques notes:
aria-labelledby
si vous deviez l'utiliser (laissé comme exercice au lecteur).la source
for
attribut sur l'label
élément.Plus tôt...
Plus tard...
Commentaire Snarky: Oui, vous pouvez également le faire avec JQuery. :-)
la source
document.querySelector ("label [for =" + vHtmlInputElement.id + "]");
Cela répond à la question de la manière la plus simple et la plus légère. Cela utilise du javascript vanille et fonctionne sur tous les navigateurs appropriés du flux principal.
la source
avec jquery vous pouvez faire quelque chose comme
la source
Si vous êtes prêt à utiliser querySelector (et vous le pouvez, même jusqu'à IE9 et parfois IE8!), Une autre méthode devient viable.
Si votre champ de formulaire a un identifiant et que vous utilisez l'
for
attribut de l'étiquette , cela devient assez simple dans JavaScript moderne:Certains ont noté plusieurs étiquettes; s'ils utilisent tous la même valeur pour l'
for
attribut, utilisez simplementquerySelectorAll
au lieu dequerySelector
et bouclez pour obtenir tout ce dont vous avez besoin.la source
Toutes les autres réponses sont extrêmement dépassées !!
Tout ce que tu dois faire est:
HTML5 est déjà pris en charge par tous les principaux navigateurs depuis de nombreuses années. Il n'y a absolument aucune raison pour que vous deviez le faire vous-même à partir de zéro ou le polyfiller! Il suffit de l'utiliser littéralement
input.labels
et cela résout tous vos problèmes.la source
input.labels
n'est pas pris en charge par IE ou Edge, et Firefox vient d'ajouter le support.Cela m'a aidé à obtenir l'étiquette d'un élément d'entrée en utilisant son ID.
la source
La réponse de Gijs a été la plus précieuse pour moi, mais malheureusement, l'extension ne fonctionne pas.
Voici une extension réécrite qui fonctionne, cela peut aider quelqu'un:
la source
Une solution vraiment concise utilisant des fonctionnalités ES6 telles que la déstructuration et les retours implicites pour en faire une ligne unique serait:
Ou pour simplement obtenir une étiquette, pas une NodeList:
la source
Il est en fait beaucoup plus facile d'ajouter un identifiant à l'étiquette dans le formulaire lui-même, par exemple:
Ensuite, vous pouvez simplement utiliser quelque chose comme ceci:
Le javascript doit être dans une fonction de chargement de corps pour fonctionner.
Juste une pensée, fonctionne à merveille pour moi.
la source
Comme cela a déjà été mentionné, la réponse (actuellement) la mieux notée ne prend pas en compte la possibilité d'intégrer une entrée dans une étiquette.
Puisque personne n'a publié de réponse sans JQuery, voici la mienne:
Dans cet exemple, par souci de simplicité, la table de recherche est directement indexée par les éléments HTML d'entrée. Ce n'est guère efficace et vous pouvez l'adapter comme vous le souhaitez.
Vous pouvez utiliser un formulaire comme élément de base ou le document entier si vous souhaitez obtenir des étiquettes pour plusieurs formulaires à la fois.
Aucune vérification n'est effectuée pour un code HTML incorrect (entrées multiples ou manquantes dans les étiquettes, entrée manquante avec l'ID htmlFor correspondant, etc.), mais n'hésitez pas à les ajouter.
Vous souhaiterez peut-être couper les textes de l'étiquette, car des espaces de fin sont souvent présents lorsque l'entrée est incorporée dans l'étiquette.
la source
La meilleure réponse fonctionne parfaitement bien mais dans la plupart des cas, il est excessif et inefficace de parcourir tous les
label
éléments.Voici une fonction efficace pour obtenir le
label
qui va avec l'input
élément:Pour moi, cette ligne de code était suffisante:
Dans la plupart des cas, le
label
sera très proche ou à côté de l'entrée, ce qui signifie que la boucle de la fonction ci-dessus n'a besoin d'itérer qu'un très petit nombre de fois.la source
avez-vous essayé d'utiliser document.getElementbyID ('id') où id est l'identifiant de l'étiquette ou est la situation où vous ne savez pas laquelle vous recherchez
la source
Utilisez un sélecteur JQuery:
la source
Pour les futurs chercheurs ... Ce qui suit est une version jQuery-ified de la réponse acceptée de FlySwat:
En utilisant:
la source
for
boucle terminéeeach()
? Pourquoi lahtmlFor
place deattr("for")
?Je sais que c'est vieux, mais j'ai eu du mal avec certaines solutions et j'ai reconstitué tout cela. J'ai testé cela sur Windows (Chrome, Firefox et MSIE) et OS X (Chrome et Safari) et je pense que c'est la solution la plus simple. Cela fonctionne avec ces trois styles de fixation d'une étiquette.
Utilisation de jQuery:
Mon JSFiddle: http://jsfiddle.net/pnosko/6PQCw/
la source
J'ai fait pour mon propre besoin, peut être utile pour quelqu'un: JSFIDDLE
la source
Je suis un peu surpris que personne ne suggère d'utiliser la méthode de relation CSS?
dans une feuille de style, vous pouvez référencer une étiquette à partir du sélecteur d'élément:
si la case à cocher a un identifiant de 'XXX' alors l'étiquette serait trouvée via jQuery par:
Vous pouvez également appliquer .find ('+ label') pour renvoyer l'étiquette à partir d'un élément de case à cocher jQuery, c'est-à-dire utile en boucle:
la source