javascript - jQuery - velg det tilknyttede etikettelementet til et inputfelt
Jeg har et sett med inndatafelt, noen av dem har tilknyttede etiketter, noen ikke:
<label for="bla">bla</label> <input type="text" id="bla" />
<label for="foo">bla <input type="checkbox" id="foo" /> </label>
<input ... />
Så, hvordan kan jeg velge den tilknyttede etiketten for hver input, hvis den finnes?
Svar #1
Du bør ikke stole på rekkefølgen av elementer ved å bruke prev eller next. Bare bruk for-attributtet til etiketten, da det skal tilsvare ID-en til elementet du for øyeblikket manipulerer:
var label = $("label[for='" + $(this).attr('id') + "']");
Imidlertid er det noen tilfeller der etiketten ikke vil ha for satt, i hvilket tilfelle etiketten vil være forelderen til den tilknyttede kontrollen. For å finne den i begge tilfeller kan du bruke en variasjon av følgende:
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;
}
}
Svar #2
Det er to måter å angi etikett for elementet på:
- Setter merkets "for"-attributt til elementets id
- Plassere elementet inne i etiketten
Så, den riktige måten å finne elementets etikett på er
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
}
Svar #3
Så lenge dine input og label elementer er knyttet sammen gjennom sine id og for attributter, bør du kunne gjøre noe som dette:
$('.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!
}
});
Hvis for ikke er satt, har elementene uansett ingen semantisk relasjon til hverandre, og det er ingen fordel med å bruke label-tagen i det tilfellet, så forhåpentligvis vil du alltid ha den relasjonen definert.
