Eu tenho uma coleção de caixas de seleção com IDs gerados e alguns deles têm um atributo extra. É possível usar o JQuery para verificar se um elemento possui um atributo específico? Por exemplo, posso verificar se o seguinte elemento possui o atributo "myattr"? O valor do atributo pode variar.
<input type="checkbox" id="A" myattr="val_attr">A</input>
Por exemplo, como posso obter uma coleção de todas as caixas de seleção que possuem esse atributo sem marcar uma a uma? Isso é possível?
jquery
attributes
Ciprian Grosu
fonte
fonte
$filtered = $collection.filter('[attribute_name]');
Respostas:
Você quer dizer que você pode selecioná-los? Se sim, então sim:
fonte
href
atributos.$("#myBox").find('a').filter(':not([href])')
EDITAR:
O
else
item acima cairá na ramificação quandomyattr
existir, mas é uma sequência vazia ou "0". Se isso for um problema, você deve testar explicitamenteundefined
:fonte
undefined
é considerado um caso extremo e a comparação acima funcionará em 99% de todos os casos.Sei que já faz muito tempo desde que a pergunta foi feita, mas achei a verificação mais clara assim:
(Como encontrado neste site aqui )
Documentação sobre se pode ser encontrada aqui
fonte
Isso funcionará:
fonte
$(this).<something>
quando aqui você pode fazerthis.hasAttribute('...')
directamente (e não se preocupam com os navegadores mais antigos, é claro.)Em JavaScript, ...
... retorna
true
*. É a diferença entre==
e===
. Além disso, o nomeundefined
pode ser definido (não é uma palavra-chave comonull
é), portanto é melhor verificar de outra maneira. A maneira mais confiável é provavelmente comparar o valor de retorno dotypeof
operador.No entanto, comparar com null deve funcionar nesse caso.
* Supondo que
undefined
é de fato indefinido.fonte
$("input[attr]").length
pode ser uma opção melhor.fonte
Algumas idéias foram lançadas usando "typeof", jQuery ".is" e ".filter", então pensei em publicar uma rápida comparação de perf. O typeof parece ser a melhor opção para isso. Enquanto os outros funcionarão, parece haver uma clara diferença de desempenho ao chamar a biblioteca jq para esse esforço.
fonte
fonte
isset()
ou por exemplo em js$("#element").attr('my_attr') === false
,Como nesta postagem , usando
.is
o seletor de atributos[]
, você pode adicionar facilmente uma função (ou protótipo):fonte
fonte
simplesmente:
mais informações: documentos oficiais
fonte
Além de selecionar todos os elementos com um atributo
$('[someAttribute]')
ou$('input[someAttribute]')
você também pode usar uma função para fazer verificações booleanas em um objeto, como em um manipulador de cliques:if(! this.hasAttribute('myattr') ) { ...
fonte
Eu criei o pacote npm com o comportamento pretendido, conforme descrito acima em questão.
Link para [npm] e [github]
O uso é muito simples. Por exemplo:
retorna verdadeiro.
Também funciona com camelcase.
fonte
Para selecionar elementos com um determinado atributo, consulte as respostas acima.
Para determinar se um determinado elemento jQuery tem um atributo específico, estou usando um pequeno plug-in que retorna
true
se o primeiro elemento da coleção ajQuery tiver este atributo:fonte
JQuery retornará o atributo como uma sequência. Portanto, você pode verificar o comprimento dessa sequência para determinar se está definido:
fonte