入力フィールドのセットがあり、それらの一部にはラベルが関連付けられていますが、一部は関連付けられていません。
<label for="bla">bla</label> <input type="text" id="bla" />
<label for="foo">bla <input type="checkbox" id="foo" /> </label>
<input ... />
したがって、入力が存在する場合、各入力に関連付けられたラベルを選択するにはどうすればよいですか?
prev
またはnext
を使用して要素の順序に依存しないでください。ラベルの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;
}
}
これがお役に立てば幸いです!
要素のラベルを指定するには、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
}
input
およびlabel
要素がid
およびfor
属性によって関連付けられている限り、次のようなことができるはずです。
$('.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
が設定されていない場合、要素は互いにセマンティックな関係を持たず、そのインスタンスでラベルタグを使用する利点はないため、常にその関係が定義されていることを願っています。