jQuery hasAttr verificando se existe um atributo em um elemento

Duplicar Possível:
Verificar a existência de um atributo com o JQuery

Como você verifica se existe um atributo em um elemento no jQuery? Semelhante ao hasClass , mas com attr ?

Por exemplo,

 if ($(this).hasAttr("name")) { // ... } 

   
 var attr = $(this).attr('name'); // For some browsers, `attr` is undefined; for others, // `attr` is false. Check for both. if (typeof attr !== typeof undefined && attr !== false) { // ... } 

Que tal apenas $(this).is("[name]") ?

A syntax [attr] é o seletor de CSS para um elemento com um atributo attr e .is() verifica se o elemento em que é chamado corresponde ao seletor de CSS especificado.

Se você verificar a existência de atributos com frequência, sugiro criar uma function hasAttr , para usar como você hasAttr em sua pergunta:

 $.fn.hasAttr = function(name) { return this.attr(name) !== undefined; }; $(document).ready(function() { if($('.edit').hasAttr('id')) { alert('true'); } else { alert('false'); } }); 
Test field

Você está tão perto, é uma loucura.

 if($(this).attr("name")) 

Não há hasAttr, mas acertar um atributo por nome só retornará indefinido se ele não existir.

É por isso que o abaixo funciona. Se você remover o atributo name de #heading, o segundo alerta será triggersdo.

Atualização: De acordo com os comentários, o abaixo funcionará se o atributo está presente e está definido para algo não se o atributo está lá, mas vazio

  

Welcome!

Tarde para a festa, mas … por que não apenas this.hasAttribute("name") ?

Referir isto

A melhor maneira de fazer isso seria com filter() :

 $("nav>ul>li>a").filter("[data-page-id]"); 

Ainda seria bom ter .hasAttr (), mas como não existe, existe dessa maneira.

 Object.prototype.hasAttr = function(attr) { if(this.attr) { var _attr = this.attr(attr); } else { var _attr = this.getAttribute(attr); } return (typeof _attr !== "undefined" && _attr !== false && _attr !== null); }; 

Eu vim a cruzar isto enquanto escrevo minha própria function para fazer a mesma coisa … Eu pensei em compartilhar, caso alguém tropeça aqui. Eu adicionei null porque getAttribute () retornará null se o atributo não existir.

Este método permitirá que você verifique objects jQuery e objects javascript regulares.

Você também pode usá-lo com atributos como disabled = “disabled” nos campos de formulário, etc. assim:

 $("#change_password").click(function() { var target = $(this).attr("rel"); if($("#" + target).attr("disabled")) { $("#" + target).attr("disabled", false); } else { $("#" + target).attr("disabled", true); } }); 

O atributo “rel” armazena o id do campo de input de destino.

Eu escrevi um plugin hasAttr () para jquery que fará tudo isso de forma muito simples, exatamente como o OP solicitou. Mais informações aqui

EDIT: Meu plugin foi excluído no grande desastre de exclusão de database plugins.jquery.com de 2010. Você pode procurar aqui algumas informações sobre como adicioná-lo e por que ele não foi adicionado.