Finde HTML-Label, das einer bestimmten Eingabe zugeordnet ist
Sagen wir, ich habe ein html-Formular. Jeder input/select/textarea wird mit einer entsprechenden <label>
mit der for
- Attribut auf die id der Begleiter. In diesem Fall weiß ich, dass jede Eingabe nur ein einziges label.
Gegeben ein input-element im javascript — über ein onkeyup-event, zum Beispiel — was ist der beste Weg zu finden, der zugehörige label?
InformationsquelleAutor der Frage Joel Coehoorn | 2008-11-12
Du musst angemeldet sein, um einen Kommentar abzugeben.
Erste, Scannen Sie die Seite für Etiketten, und weisen Sie einen Verweis auf das Etikett von der tatsächlichen form element:
Dann können Sie einfach gehen:
Keine Notwendigkeit für eine lookup-array 🙂
InformationsquelleAutor der Antwort FlySwat
Wenn Sie jQuery können Sie so etwas tun
Wenn Sie nicht mit Hilfe von jQuery haben Sie die Suche nach dem Etikett. Hier ist eine Funktion, die element als argument und liefert den dazugehörigen label
InformationsquelleAutor der Antwort TonyB
Es ist ein
labels
Eigenschaft in der HTML5-standard die Punkte, um die Etiketten, die verbunden sind, um ein input-element.Also könnten Sie so etwas wie dieses (Unterstützung für native
labels
Eigenschaft aber mit einem fallback für das abrufen von Etiketten im Fall, dass der browser nicht unterstützt wird)...Sogar einfacher, wenn Sie mit jQuery...
InformationsquelleAutor der Antwort alex
Ich bin ein bisschen überrascht, dass niemand scheint zu wissen, dass man perfekt erlaubt zu tun:
Welche nicht abgeholt, die durch eine der vorgeschlagenen Antworten, aber wird label die Eingabe korrekt.
Hier ist etwas code, der dauert diesem Fall zu berücksichtigen:
Verwendung:
Einige Hinweise:
aria-labelledby
wenn Sie waren zu verwenden, die (Links als eine übung für den Leser).InformationsquelleAutor der Antwort Gijs
Früher...
Später...
Snarky Kommentar: ja, kann man es auch mit JQuery. 🙂
InformationsquelleAutor der Antwort Tomalak
mit jquery könnte man etwas tun, wie
InformationsquelleAutor der Antwort AndreasKnudsen
Wenn Sie bereit sind, zu verwenden querySelector (und Sie kann sogar bis auf IE9 und manchmal IE8!), eine andere Methode wird lebensfähig.
Wenn ein Formular-Feld hat eine ID, und verwenden Sie die Bezeichnung
for
Attribut, wird dies ziemlich einfach, in der modernen JavaScript:Einige haben angemerkt, über mehrere Etiketten; wenn Sie alle den gleichen Wert für die
for
- Attribut, verwenden Sie einfachquerySelectorAll
stattquerySelector
Schleife durch alles bekommen, was Sie brauchen.InformationsquelleAutor der Antwort Brendan
Dokument.querySelector("label[for=" + vHtmlInputElement.id + "]");
Dieser beantwortet die Frage in der einfachsten und schlanksten Art und Weise.
Dies nutzt vanilla javascript und funktioniert auf allen main-stream-richtige Browser.
InformationsquelleAutor der Antwort Luigi D'Amico
Diese mir geholfen die Beschriftung eines input-element mittels seiner ID.
InformationsquelleAutor der Antwort haifacarina
Antwort von Gijs war sehr wertvoll für mich, aber leider ist die Erweiterung nicht funktioniert.
Hier ist ein umgeschrieben Erweiterung, die funktioniert, es kann jemand helfen:
InformationsquelleAutor der Antwort OzrenTkalcecKrznaric
Es ist eigentlich viel einfacher, um eine id, die Bezeichnung, die im Formular selbst, zum Beispiel:
Dann können Sie einfach so etwas wie dieses:
Javascript funktioniert im body onload-Funktion zu arbeiten.
Nur ein Gedanke, funktioniert wunderbar für mich.
InformationsquelleAutor der Antwort Martie Henry
Wie es bereits wissen, die (aktuell) top-bewerteten Antwort nicht berücksichtigen, die Möglichkeit zum einbetten von einer Eingabe innerhalb eines Etiketts.
Da niemand gepostet hat ein JQuery-freie Antwort, hier ist meins :
In diesem Beispiel der Einfachheit halber an, der lookup-Tabelle ist direkt indiziert durch die Eingabe von HTML-Elementen. Dies ist wenig effizient, und Sie können es anpassen wie Sie wollen.
Können Sie ein Formular verwenden, das als Basis-element, oder das ganze Dokument, wenn Sie möchten, um Etiketten für mehrere Formulare gleichzeitig.
Nicht geprüft für Falsches HTML (oder mehrere fehlende Eingänge innen-Beschriftungen, fehlende Eingabe mit entsprechenden htmlFor-id, etc), aber fühlen Sie sich frei, um Sie hinzuzufügen.
Möchten Sie vielleicht schneiden Sie die label-Texte, da nachgestellte Leerzeichen sind oft vorhanden, wenn der Eingang eingebettet in das label.
InformationsquelleAutor der Antwort kuroi neko
Alle anderen Antworten sind extrem veraltet!!
Alles, was Sie tun müssen, ist:
HTML5 wird von allen großen Browsern schon seit vielen Jahren. Es gibt absolut keinen Grund, die Sie haben sollten, um diese von Grund auf Ihre eigenen oder polyfill! Buchstäblich nur verwenden
input.labels
und es löst alle Ihre Probleme.InformationsquelleAutor der Antwort dj nag
haben Sie versucht, mit Hilfe Dokument.getElementbyID('id'), wobei id die id des label-oder ist die situation, dass Sie nicht wissen, welche Sie sind auf der Suche für
InformationsquelleAutor der Antwort Josh Mein
Verwenden Sie einen JQuery-Selektor:
InformationsquelleAutor der Antwort Mike McKay
Für zukünftige Suchende... Das folgende ist ein jQuery-freundlich-version von FlySwat, akzeptiert Antwort:
Mit:
InformationsquelleAutor der Antwort ObjectType
Ich weiß, das ist alt, aber ich hatte Probleme mit einigen Lösungen und setzte diese zusammen. Ich habe diese getestet unter Windows (Chrome, Firefox und MSIE) und OS X (Chrome und Safari) und glaube, das ist die einfachste Lösung. Es funktioniert mit diesen drei Stil der Anbringung einer Beschriftung.
Verwendung von jQuery:
Mein JSFiddle: http://jsfiddle.net/pnosko/6PQCw/
InformationsquelleAutor der Antwort Peter Nosko
Habe ich gemacht für meinen eigenen Bedarf, kann nützlich sein für jemanden: JSFIDDLE
InformationsquelleAutor der Antwort itsazzad
Ich bin etwas überrascht, niemand ist darauf hindeutet, verwenden Sie die CSS-Beziehung-Methode?
in einem Stylesheet können Sie die Referenz ein label aus der element-Selektor:
wenn das Kontrollkästchen " hat die id 'XXX'
dann wird die Beschriftung durch die jQuery von:
Können Sie auch anwenden .find('+ label'), um das Etikett von einer jQuery-checkbox-element, dh nützlich, wenn man looping:
InformationsquelleAutor der Antwort Gordon Rouse
Eine wirklich prägnante Lösung mit ES6-features wie destructuring und implizite zurück, um Sie in ein handy ein liner wäre:
const getLabels = ({ labels, id }) => labels || document.querySelectorAll(`label[for=${id}]`)
Oder einfach erhalten ein label, nicht eine NodeList:
const getFirstLabel = ({ labels, id }) => labels && labels[0] || document.querySelector(`label[for=${id}]`)
InformationsquelleAutor der Antwort StateOfTheArtJonas
Ist die beste Antwort die funktioniert völlig in Ordnung, aber in den meisten Fällen, es ist übertrieben und ineffizient, um eine Schleife durch alle
label
Elemente.Hier ist eine einwandfreie Funktion zu bekommen, die
label
das geht mit deninput
element:Mir, diese eine Zeile code war ausreichend:
In den meisten Fällen, die
label
wird sehr nah oder neben dem Eingang, was bedeutet, dass die Schleife in der oben genannten Funktion muss nur Durchlaufen eine sehr kleine Anzahl von Zeiten.InformationsquelleAutor der Antwort Dan Bray