Html étiquette associée à une entrée donnée
Disons que j'ai un formulaire html. Chaque entrée/sélectionner/textarea aura un correspondant <label>
avec le for
attribut valeur l'id de son compagnon. Dans ce cas, je sais que chaque entrée n'auront qu'une seule étiquette.
Donné un élément d'entrée en javascript via un événement onkeyup, par exemple — ce qui est le meilleur moyen de trouver de l'étiquette associée?
- Note qu'un élément peut avoir plus d'une étiquette, j'ai vu certaines applications (SAP par exemple) qui ont plusieurs étiquettes par élément.
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 };
- ou tout simplement nœud.parentNode.querySelector("label[for='" + node.id + "']").innerHTML; lol
Vous devez vous connecter pour publier un commentaire.
D'abord, parcourez la page des étiquettes, et d'attribuer une référence à l'étiquette de l'élément de formulaire:
Ensuite, vous pouvez simplement aller:
Pas nécessaire pour une recherche de tableau 🙂
Si vous utilisez jQuery, vous pouvez faire quelque chose comme ceci
Si vous n'êtes pas à l'aide de jQuery, vous aurez à la recherche pour le label. Voici une fonction qui prend l'élément comme un argument et renvoie l'étiquette associée
Il y a un
labels
propriété dans le La norme HTML5 qui souligne les étiquettes qui sont associés à un élément de saisie.Afin que vous pouvez utiliser quelque chose comme ceci (natif
labels
bien, mais avec un repli pour la récupération des étiquettes dans le cas où le navigateur ne le supporte pas)...Encore plus facile si vous êtes en utilisant jQuery...
Je suis un peu surpris de voir que personne ne semble savoir que vous êtes parfaitement autorisé à faire:
Qui ne sont pas ramassés par l'une des réponses proposées, mais sera étiquette de l'entrée correctement.
Voici un code qui fait prendre ce cas en compte:
Utilisation:
Quelques remarques:
aria-labelledby
si vous étiez à les utiliser (laissé comme exercice au lecteur).for
attribut sur lalabel
élément.Plus tôt...
Plus tard...
Sarcastique commentaire: Oui, vous pouvez aussi le faire avec JQuery. 🙂
document.querySelector("label[for=" + vHtmlInputElement.id + "]");
Ceci répond à la question dans les plus simples et les plus économes manière.
Il utilise de la vanille javascript et fonctionne sur tous les principaux flux correct des navigateurs.
avec jquery, vous pourriez faire quelque chose comme
Si vous êtes prêt à utiliser querySelector (et vous pouvez même pour IE9 et parfois IE8!), une autre méthode devient viable.
Si votre champ de formulaire a un ID, et que vous utilisez l'étiquette de
for
attribut, cela devient assez simple, moderne JavaScript:Certains l'ont noté plusieurs étiquettes; si elles utilisent toutes la même valeur pour la
for
attribut, il suffit d'utiliserquerySelectorAll
au lieu dequerySelector
et faire une boucle pour obtenir tout ce dont vous avez besoin.Cela m'a aidé à obtenir le label d'un élément d'entrée à l'aide de son ID.
Réponse de Gijs était le plus précieux pour moi, mais malheureusement, l'extension ne fonctionne pas.
Voici une réécrit extension qui fonctionne, il peut aider quelqu'un:
Toutes les autres réponses sont extrêmement périmé!!
Tout ce que vous avez à faire est de:
HTML5 a été pris en charge par tous les navigateurs majeurs depuis de nombreuses années déjà. Il n'y a absolument aucune raison que vous devriez avoir à faire ce à partir de zéro sur votre propre ou polyfill il! Littéralement juste utiliser
input.labels
et il résout tous vos problèmes.input.labels
n'est pas pris en charge par IE ou un Bord, et uniquement pour Firefox vient d'ajouter le support.C'est en fait beaucoup plus facile d'ajouter un id de l'étiquette dans le formulaire lui-même, par exemple:
Ensuite, vous pouvez simplement utiliser quelque chose comme ceci:
Le javascript n'ont à être dans un body onload de la fonction de travail.
Juste une pensée, fonctionne à merveille pour moi.
Comme il a déjà été mentionné, l' (actuellement) les mieux notés réponse ne tient pas compte de la possibilité d'incorporer une entrée à l'intérieur d'une étiquette.
Puisque personne n'a posté un JQuery-libre réponse, voici la mienne :
Dans cet exemple, par souci de simplicité, la table de recherche est directement indexée par l'apport d'éléments HTML. 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 en entier si vous souhaitez obtenir des étiquettes pour plusieurs formes à la fois.
Aucune vérification n'est faite pour HTML incorrect (multiple ou manquant entrées à l'intérieur des étiquettes, manquant d'entrée correspondant htmlFor id, etc), mais n'hésitez pas à les ajouter.
Vous pourriez voulez couper l'étiquette textes, puisque les espaces sont souvent présents lorsque l'entrée est incorporé dans l'étiquette.
Un très concis solution à l'aide de ES6 fonctionnalités comme la déstructuration et de rendement implicite de la transformer en une pratique un liner serait:
Ou tout simplement obtenir un label, pas une NodeList:
avez-vous essayé d'utiliser document.getElementbyID('id') où id est l'identifiant de l'étiquette ou de la situation est que vous ne savez pas qui vous êtes à la recherche pour
Utiliser un sélecteur JQuery:
Pour les futurs chercheurs... ce qui suit est un jQuery-identifiés version de FlySwat est accepté réponse:
À l'aide de:
for
boucle sureach()
? Pourquoi lehtmlFor
au lieu deattr("for")
?Je sais que c'est vieux, mais j'ai eu du mal avec certaines solutions et des pièces de cet ensemble. J'ai testé sur Windows (Chrome, Firefox et MSIE) et OS X (Chrome et Safari) et croient que c'est la solution la plus simple. Il fonctionne avec ces trois style d'attacher une étiquette.
À l'aide de jQuery:
Mon JSFiddle: http://jsfiddle.net/pnosko/6PQCw/
J'ai fait pour mon propre besoin, peut être utile pour quelqu'un: JSFIDDLE
Je suis un peu surpris personne ne suggère d'utiliser le CSS relation de méthode?
dans une feuille de style, vous pouvez faire référence à l'étiquette de l'élément sélecteur:
si la case a un id de 'XXX'
ensuite, l'étiquette devra être trouvé par le biais de jQuery par:
Vous pouvez également l'appliquer .find('+ label') pour retourner l'étiquette de jQuery case de l'élément, c'est à dire utile lors de la boucle:
La meilleure réponse qui fonctionne parfaitement bien, mais dans la plupart des cas, il est exagéré, et inefficace d'une boucle sur tous les
label
éléments.Voici un efficace fonction pour obtenir les
label
qui va avec lainput
élément:Pour moi, cette ligne de code a été suffisant:
Dans la plupart des cas, la
label
sera très proche ou à côté de l'entrée, ce qui signifie que la boucle dans la fonction ci-dessus ne doit effectuer une itération sur un très petit nombre de fois.