Digamos que tengo un formulario html. Cada input / select / textarea tendrá una correspondencia <label>
con el for
atributo 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
labels
propiedad 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
labels
propiedad 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-labelledby
si lo usaras (se deja como ejercicio para el lector).fuente
for
atributo en ellabel
elemento.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
for
atributo 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
for
atributo, solo use enquerySelectorAll
lugar dequerySelector
y 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.labels
y resuelve todos sus problemas.fuente
input.labels
no 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
label
elementos.Aquí hay una función eficiente para obtener la
label
que va con elinput
elemento:Para mí, esta línea de código fue suficiente:
En la mayoría de los casos,
label
estará 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
for
acabó el bucleeach()
? ¿Por qué enhtmlFor
lugar 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