Digamos que eu tenha um formulário html. Cada input / select / textarea terá um correspondente <label>
com o for
atributo definido para o id de seu companheiro. Nesse caso, sei que cada entrada terá apenas um rótulo.
Dado um elemento de entrada em javascript - por meio de um evento onkeyup, por exemplo - qual é a melhor maneira de encontrar seu rótulo associado?
javascript
html
label
Joel Coehoorn
fonte
fonte
function getInputLabel(thisElement) { var theAssociatedLabel,elementID; elementID = thisElement.id; theAssociatedLabel = thisElement.parentNode.querySelector("label[for='" + elementID + "']"); console.log('theAssociatedLabel.htmlFor: ' + theAssociatedLabel.htmlFor); theAssociatedLabel.style.backgroundColor = "green";//Set the label background color to green };
Respostas:
Primeiro, examine a página em busca de rótulos e atribua uma referência ao rótulo do elemento real do formulário:
Então, você pode simplesmente ir:
Não há necessidade de uma matriz de pesquisa :)
fonte
Se você estiver usando jQuery, você pode fazer algo assim
Se você não estiver usando jQuery, você terá que pesquisar o rótulo. Aqui está uma função que recebe o elemento como um argumento e retorna o rótulo associado
fonte
Existe uma
labels
propriedade no padrão HTML5 que aponta para rótulos associados a um elemento de entrada.Então, você poderia usar algo assim (suporte para
labels
propriedade nativa , mas com um substituto para recuperar rótulos caso o navegador não seja compatível) ...Ainda mais fácil se você estiver usando jQuery ...
fonte
Estou um pouco surpreso que ninguém pareça saber que você está perfeitamente autorizado a fazer:
Que não são apanhados por qualquer uma das respostas sugeridas, mas vai rotular a entrada corretamente.
Aqui está um código que leva esse caso em consideração:
Uso:
Algumas notas:
aria-labelledby
se você fosse usar isso (deixado como um exercício para o leitor).fonte
for
atributo nolabel
elemento.Anteriormente ...
Mais tarde...
Comentário Snarky: Sim, você também pode fazer isso com JQuery. :-)
fonte
document.querySelector ("label [for =" + vHtmlInputElement.id + "]");
Isso responde à pergunta da maneira mais simples e enxuta. Este usa javascript vanilla e funciona em todos os navegadores adequados.
fonte
com jquery você poderia fazer algo como
fonte
Se você deseja usar o querySelector (e pode, mesmo no IE9 e às vezes no IE8!), Outro método se torna viável.
Se o campo do seu formulário tiver um ID e você usar o
for
atributo do rótulo , isso se torna muito simples no JavaScript moderno:Alguns notaram sobre vários rótulos; se todos eles usarem o mesmo valor para o
for
atributo, basta usar emquerySelectorAll
vez dequerySelector
e fazer um loop para obter tudo o que você precisa.fonte
Isso me ajudou a obter o rótulo de um elemento de entrada usando seu ID.
fonte
A resposta de Gijs foi muito valiosa para mim, mas infelizmente a extensão não funciona.
Esta é uma extensão reescrita que funciona, pode ajudar alguém:
fonte
Todas as outras respostas estão extremamente desatualizadas !!
Tudo o que tem a fazer é:
O HTML5 é suportado por todos os principais navegadores há muitos anos. Não há absolutamente nenhuma razão para você ter que fazer isso do zero por conta própria ou polyfill! Literalmente, basta usar
input.labels
e resolverá todos os seus problemas.fonte
input.labels
não é compatível com IE ou Edge, e o Firefox apenas adicionou o suporte.Uma solução realmente concisa usando recursos ES6 como desestruturação e retornos implícitos para transformá-lo em um revestimento prático seria:
Ou simplesmente obter um rótulo, não um NodeList:
fonte
Na verdade, é muito mais fácil adicionar um id ao rótulo no próprio formulário, por exemplo:
Então, você pode simplesmente usar algo assim:
O javascript precisa estar em uma função body onload para funcionar.
Apenas um pensamento, funciona perfeitamente para mim.
fonte
Como já foi mencionado, a resposta (atualmente) mais bem avaliada não leva em consideração a possibilidade de inserir uma entrada dentro de um rótulo.
Como ninguém postou uma resposta sem JQuery, aqui está a minha:
Neste exemplo, por questão de simplicidade, a tabela de pesquisa é indexada diretamente pelos elementos HTML de entrada. Isso dificilmente é eficiente e você pode adaptá-lo como quiser.
Você pode usar um formulário como elemento base ou o documento inteiro se quiser obter rótulos para vários formulários de uma vez.
Nenhuma verificação é feita para HTML incorreto (entradas múltiplas ou ausentes dentro dos rótulos, entrada ausente com o id htmlFor correspondente, etc), mas sinta-se à vontade para adicioná-los.
Você pode querer cortar os textos do rótulo, uma vez que espaços à direita geralmente estão presentes quando a entrada é incorporada ao rótulo.
fonte
A melhor resposta funciona perfeitamente bem, mas na maioria dos casos, é um exagero e ineficiente percorrer todos os
label
elementos.Aqui está uma função eficiente para obter o
label
que vai com oinput
elemento:Para mim, esta única linha de código foi suficiente:
Na maioria dos casos, o
label
estará muito próximo ou próximo à entrada, o que significa que o loop na função acima só precisa iterar um número muito pequeno de vezes.fonte
você tentou usar document.getElementbyID ('id') onde id é o id do rótulo ou é a situação em que você não sabe qual deles está procurando
fonte
Use um seletor JQuery:
fonte
Para futuros pesquisadores ... O seguinte é uma versão jQuery-ified da resposta aceita de FlySwat:
Usando:
fonte
for
loop acaboueach()
? Por que o emhtmlFor
vez deattr("for")
?Eu sei que isso é antigo, mas tive problemas com algumas soluções e juntei as peças. Eu testei isso no Windows (Chrome, Firefox e MSIE) e OS X (Chrome e Safari) e acredito que esta é a solução mais simples. Funciona com estes três estilos de fixação de etiqueta.
Usando jQuery:
Meu JSFiddle: http://jsfiddle.net/pnosko/6PQCw/
fonte
Eu fiz para minha própria necessidade, pode ser útil para alguém: JSFIDDLE
fonte
Estou um pouco surpreso por ninguém estar sugerindo o uso do método de relacionamento CSS.
em uma folha de estilo, você pode fazer referência a um rótulo do seletor de elemento:
se a caixa de seleção tiver um id 'XXX', o rótulo será encontrado por meio do jQuery por:
Você também pode aplicar .find ('+ rótulo') para retornar o rótulo de um elemento de caixa de seleção jQuery, ou seja, útil durante o loop:
fonte