Selecionar elementos por atributo

Eu tenho uma coleção de checkboxs 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 elemento a seguir tem o atributo “myattr”? O valor do atributo pode variar.

A 

Por exemplo, como posso obter uma coleção de todas as checkboxs de seleção que possuem esse atributo sem verificar uma por uma? Isso é possível?

Você quer dizer que você pode selecioná-los? Se sim, então sim:

 $(":checkbox[myattr]") 
 if ($('#A').attr('myattr')) { // attribute exists } else { // attribute does not exist } 

EDITAR:

O acima irá cair no else myattr quando myattr existir, mas é uma string vazia ou “0”. Se esse for um problema que você deve testar explicitamente em undefined :

 if ($('#A').attr('myattr') !== undefined) { // attribute exists } else { // attribute does not exist } 

Eu sei que já faz muito tempo desde que a pergunta foi feita, mas achei o cheque para ser mais claro assim:

 if ($("#A").is('[myattr]')) { // attribute exists } else { // attribute does not exist } 

(Como encontrado neste site aqui )

Documentação sobre é pode ser encontrada aqui

Em JavaScript, …

 null == undefined 

… retorna true *. É a diferença entre == e === . Além disso, o nome undefined pode ser definido (não é uma palavra-chave como null é), portanto, é melhor verificar de outra maneira. A maneira mais confiável é provavelmente comparar o valor de retorno do operador typeof .

 typeof o == "undefined" 

No entanto, comparando com null deve funcionar neste caso.

* Assumir undefined é de fato indefinido.

Isso vai funcionar:

 $('#A')[0].hasAttribute('myattr'); 

$("input[attr]").length pode ser uma opção melhor.

Algumas ideias foram lançadas usando “typeof”, jQuery “.is” e “.filter”, então pensei em postar uma comparação rápida entre elas. O tipo parece ser a melhor escolha para isso. Enquanto os outros funcionarão, parece haver uma clara diferença de desempenho ao invocar a biblioteca jq para esse esforço.

 $("input#A").attr("myattr") == null 

simplesmente:

 $('input[name*="value"]') 

mais informações: documentos oficiais

 if (!$("#element").attr('my_attr')){ //return false //attribute doesn't exists } 

Além de selecionar todos os elementos com um atributo $('[someAttribute]') ou $('input[someAttribute]') você também pode usar uma function para fazer verificações booleanas em um object, como em um manipulador de cliques:

if(! this.hasAttribute('myattr') ) { ...

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:

 

something

$("#test").hasAttr("class")

retorna verdadeiro.

Trabalha com camelcase também.

JQuery retornará o atributo como uma string. Portanto, você pode verificar o tamanho dessa string para determinar se está definido:

 if ($("input#A").attr("myattr").length == 0) return null; else return $("input#A").attr("myattr");