Digamos que tengo un formulario html. Cada input / select / textarea tendrá una correspondencia <label>con el foratributo establecido en la identificación de su compañero. En este caso, sé que cada entrada solo tendrá una etiqueta.
Dado un elemento de entrada en javascript, a través de un evento onkeyup, por ejemplo, ¿cuál es la mejor manera de encontrar su etiqueta asociada?
javascript
html
label
Joel Coehoorn
fuente
fuente

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 };Respuestas:
Primero, escanee la página en busca de etiquetas y asigne una referencia a la etiqueta desde el elemento de formulario real:
Entonces, simplemente puede ir:
No se necesita una matriz de búsqueda :)
fuente
Si está utilizando jQuery, puede hacer algo como esto
Si no está utilizando jQuery, tendrá que buscar la etiqueta. Aquí hay una función que toma el elemento como argumento y devuelve la etiqueta asociada
fuente
Hay una
labelspropiedad en el estándar HTML5 que apunta a las etiquetas que están asociadas a un elemento de entrada.Entonces, podría usar algo como esto (soporte para
labelspropiedad nativa pero con un respaldo para recuperar etiquetas en caso de que el navegador no lo admita) ...Incluso más fácil si estás usando jQuery ...
fuente
Estoy un poco sorprendido de que nadie parezca saber que estás perfectamente autorizado a hacer:
Que no obtendrá recogido por ninguna de las respuestas sugeridas, pero va a etiquetar la entrada correctamente.
Aquí hay un código que tiene en cuenta este caso:
Uso:
Algunas notas:
aria-labelledbysi lo usaras (se deja como ejercicio para el lector).fuente
foratributo en ellabelelemento.Más temprano...
Luego...
Comentario sarcástico: Sí, también puedes hacerlo con JQuery. :-)
fuente
document.querySelector ("etiqueta [para =" + vHtmlInputElement.id + "]");
Esto responde a la pregunta de la manera más simple y ágil. Esto usa javascript vainilla y funciona en todos los navegadores adecuados de la corriente principal.
fuente
con jquery podrías hacer algo como
fuente
Si está dispuesto a utilizar querySelector (y puede hacerlo, incluso hasta IE9 y, a veces, IE8), otro método se vuelve viable.
Si su campo de formulario tiene una ID y usa el
foratributo de la etiqueta , esto se vuelve bastante simple en JavaScript moderno:Algunos han notado sobre múltiples etiquetas; si todos usan el mismo valor para el
foratributo, solo use enquerySelectorAlllugar dequerySelectory recorra para obtener todo lo que necesita.fuente
¡Todas las otras respuestas están extremadamente desactualizadas!
Todo lo que tienes que hacer es:
HTML5 ha sido compatible con todos los navegadores principales durante muchos años. ¡No hay absolutamente ninguna razón por la que deba hacer esto desde cero por su cuenta o rellenarlo con polietileno! Literalmente, solo use
input.labelsy resuelve todos sus problemas.fuente
input.labelsno es compatible con IE o Edge, y Firefox acaba de agregar el soporte.Esto me ayudó a obtener la etiqueta de un elemento de entrada usando su ID.
fuente
La respuesta de Gijs fue muy valiosa para mí, pero lamentablemente la extensión no funciona.
Aquí hay una extensión reescrita que funciona, puede ayudar a alguien:
fuente
Una solución realmente concisa que utiliza características de ES6 como desestructuración y retornos implícitos para convertirlo en una línea práctica sería:
O simplemente para obtener una etiqueta, no una NodeList:
fuente
En realidad, es mucho más fácil agregar una identificación a la etiqueta en el formulario en sí, por ejemplo:
Entonces, simplemente puede usar algo como esto:
El javascript tiene que estar en una función de carga corporal para que funcione.
Solo un pensamiento, funciona maravillosamente para mí.
fuente
Como ya se mencionó, la respuesta (actualmente) mejor calificada no tiene en cuenta la posibilidad de insertar una entrada dentro de una etiqueta.
Como nadie ha publicado una respuesta sin JQuery, aquí está la mía:
En este ejemplo, en aras de la simplicidad, los elementos HTML de entrada indexan directamente la tabla de búsqueda. Esto es poco eficiente y puedes adaptarlo como quieras.
Puede utilizar un formulario como elemento base o el documento completo si desea obtener etiquetas para varios formularios a la vez.
No se realizan verificaciones para HTML incorrecto (entradas múltiples o faltantes dentro de las etiquetas, entrada faltante con la identificación htmlFor correspondiente, etc.), pero no dude en agregarlas.
Es posible que desee recortar los textos de la etiqueta, ya que los espacios finales suelen estar presentes cuando la entrada está incrustada en la etiqueta.
fuente
La mejor respuesta funciona perfectamente bien, pero en la mayoría de los casos, es excesivo e ineficiente recorrer todos los
labelelementos.Aquí hay una función eficiente para obtener la
labelque va con elinputelemento:Para mí, esta línea de código fue suficiente:
En la mayoría de los casos,
labelestará muy cerca o al lado de la entrada, lo que significa que el ciclo en la función anterior solo necesita iterar un número muy pequeño de veces.fuente
¿Ha intentado usar document.getElementbyID ('id') donde id es el id de la etiqueta o es la situación en la que no sabe cuál está buscando?
fuente
Utilice un selector de JQuery:
fuente
Para futuros buscadores ... La siguiente es una versión jQuery-ified de la respuesta aceptada de FlySwat:
Utilizando:
fuente
foracabó el bucleeach()? ¿Por qué enhtmlForlugar deattr("for")?Sé que esto es antiguo, pero tuve problemas con algunas soluciones y lo armé. He probado esto en Windows (Chrome, Firefox y MSIE) y OS X (Chrome y Safari) y creo que esta es la solución más simple. Funciona con estos tres estilos de pegar una etiqueta.
Usando jQuery:
Mi JSFiddle: http://jsfiddle.net/pnosko/6PQCw/
fuente
Lo hice para mi propia necesidad, puede ser útil para alguien: JSFIDDLE
fuente
Estoy un poco sorprendido de que nadie sugiera usar el método de relación CSS.
en una hoja de estilo, puede hacer referencia a una etiqueta desde el selector de elementos:
si la casilla de verificación tiene una identificación de 'XXX', entonces la etiqueta se encontrará a través de jQuery por:
También puede aplicar .find ('+ etiqueta') para devolver la etiqueta de un elemento de casilla de verificación de jQuery, es decir, útil cuando se repite:
fuente