JQuery-选择输入字段的相关标签元素

我有一组输入字段,其中一些有相关的标签,一些没有:

<label for="bla">bla</label> <input type="text" id="bla" />


<label for="foo">bla <input type="checkbox" id="foo" /> </label>


<input ... />

因此,如果每个输入都存在,我如何为它选择相关的标签?

178429 次浏览

使用 prevnext时不应该依赖于元素的顺序。只需使用 label 的 for属性,因为它应该对应于您当前操作的元素的 ID:

var label = $("label[for='" + $(this).attr('id') + "']");

但是,在某些情况下,标签没有设置 for,在这种情况下,标签将是其关联控件的父级。要在两种情况下都找到它,您可以使用以下变体:

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;
}
}

I hope this helps!

只要您的 inputlabel元素通过它们的 idfor属性相关联,您就应该能够执行以下操作:

$('.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!
}
});

如果没有设置 for,那么元素之间就没有任何语义关系,并且在该实例中使用 label 标记没有任何好处,所以希望您总是能够定义这种关系。

为元素指定 label 有两种方法:

  1. 将 label 的“ for”属性设置为元素的 id
  2. 在标签中放置元素

因此,找到元素标签的正确方法是

   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
}