Tengo un conjunto de campos de entrada, algunos de ellos tienen etiquetas asociadas, otros no:
<label for="bla">bla</label> <input type="text" id="bla" /> <label for="foo">bla <input type="checkbox" id="foo" /> </label> <input ... />Entonces, ¿cómo puedo seleccionar la etiqueta asociada para cada entrada, si existe?
No debe confiar en el orden de los elementos usando prev o next . Simplemente use el atributo for de la etiqueta, ya que debería corresponder a la ID del elemento que está manipulando actualmente:
var label = $("label[for='" + $(this).attr('id') + "']"); Sin embargo, hay algunos casos en los que la etiqueta no tendrá for set, en cuyo caso la etiqueta será la principal de su control asociado. Para encontrarlo en ambos casos, puede usar una variación de lo siguiente:
var label = $('label[for="' + $(this).attr('id') + '"]'); if(label.length <= 0) { var parentElem = $(this).parent(), parentTagName = parentElem.get(0).tagName.toLowerCase(); if(parentTagName == "label") { label = parentElem; } }¡Espero que esto ayude!
Hay dos formas de especificar la etiqueta para el elemento:
Entonces, la forma correcta de encontrar la etiqueta del elemento es
var $element = $( ... ) var $label = $("label[for='"+$element.attr('id')+"']") if ($label.length == 0) { $label = $element.closest('label') } if ($label.length == 0) { // label wasn't found } else { // label was found }Siempre que sus elementos de input y label estén asociados for su id y atributos, debería poder hacer algo como esto:
$('.input').each(function() { $this = $(this); $label = $('label[for="'+ $this.attr('id') +'"]'); if ($label.length > 0 ) { //this input has a label associated with it, lets do something! } }); Si for no está configurado, los elementos no tienen una relación semántica entre sí de todos modos, y no hay ningún beneficio en usar la etiqueta de etiqueta en esa instancia, por lo que es de esperar que siempre tenga definida esa relación.