jQuery - 选择输入字段的关联标签元素

Ale*_*lex 105 javascript forms jquery

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

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

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

<input ... />
Run Code Online (Sandbox Code Playgroud)

那么,如何为每个输入选择相关标签?

小智 186

您不应该使用prev或依赖元素的顺序next.只需使用for标签的属性,因为它应该对应于您当前正在操作的元素的ID:

var label = $("label[for='" + $(this).attr('id') + "']");
Run Code Online (Sandbox Code Playgroud)

但是,在某些情况下标签不会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;
    }
}
Run Code Online (Sandbox Code Playgroud)

我希望这有帮助!

  • -1用于搜索父标签标签的笨拙方式.此外,<label>可能不是元素的直接父元素.看我的解决方案. (10认同)

Max*_*kin 48

有两种方法可以为元素指定标签:

  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
   }
Run Code Online (Sandbox Code Playgroud)


Nat*_*son 15

只要和你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!
   }
});
Run Code Online (Sandbox Code Playgroud)

如果for没有设置,则元素之间没有任何语义关系,并且在该实例中使用label标签没有任何好处,因此希望您始终定义该关系.