Pregunta jQuery tiene la comprobación de Att para ver si hay un atributo en un elemento [duplicado]


Posible duplicado:
Verifique la existencia de un atributo con JQuery 

¿Cómo verifica si hay un atributo en un elemento en jQuery? Similar a hasClass, pero con attr?

Por ejemplo,

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

601
2017-08-23 08:38


origen


Respuestas:


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) {
    // ...
}

939
2017-08-23 08:42



¿Qué tal solo $(this).is("[name]")?

los [attr] sintaxis es el selector de CSS para un elemento con un atributo attry .is() comprueba si el elemento al que se llama coincide con el selector CSS dado.


564
2018-01-11 19:59



Si va a verificar la existencia de atributos con frecuencia, le sugiero que cree un hasAttr función, para usarla como formuló la hipótesis en su pregunta:

$.fn.hasAttr = function(name) {  
   return this.attr(name) !== undefined;
};

$(document).ready(function() {
    if($('.edit').hasAttr('id')) {
        alert('true');
    } else {
        alert('false');
    }
});

<div class="edit" id="div_1">Test field</div>

133
2017-08-23 09:11



Estás tan cerca que es una locura.

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

No hay hasttr, pero presionar un atributo por su nombre simplemente devolverá indefinido si no existe.

Esta es la razón por la que funciona a continuación. Si elimina el atributo de nombre de # encabezado, se activará la segunda alerta.

Actualizar: Según los comentarios, a continuación se SOLAMENTE funciona si el atributo está presente Y está configurado a algo, no si el atributo está allí, pero está vacío

<script type="text/javascript">
$(document).ready(function()
{
    if ($("#heading").attr("name"))
      alert('Look, this is showing because it\'s not undefined');
    else
      alert('This would be called if it were undefined or is there but empty');
});
</script>
<h1 id="heading" name="bob">Welcome!</h1>

79
2017-08-23 08:42



Tarde a la fiesta, pero ... ¿por qué no solo this.hasAttribute("name")?

Referir Esta


68
2018-01-03 22:59



La mejor manera de hacerlo sería con filter():

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

Todavía sería bueno tener .hasAttr (), pero como no existe, existe de esta manera.


15
2018-05-25 08:23



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);      
};

Vine a cruzar esto mientras escribía mi propia función para hacer lo mismo ... Pensé en compartir en caso de que alguien más tropiece aquí. Agregué null porque getAttribute () devolverá null si el atributo no existe.

Este método le permitirá verificar los objetos jQuery y los objetos regulares de JavaScript.


6
2017-09-23 15:03



También puede usarlo con atributos tales como disabled = "disabled" en los campos del formulario, etc. de esta manera:

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

El atributo "rel" almacena la identificación del campo de entrada de destino.


5
2017-08-11 13:37



Escribí un plugin hasAttr () para jquery que hará todo esto de manera muy sencilla, exactamente como lo ha solicitado el OP. Más información aquí

EDITAR: Mi complemento fue eliminado en el gran desastre de eliminación de la base de datos plugins.jquery.com de 2010. Puedes mirar aquí para obtener información sobre cómo agregarla usted mismo y por qué no se ha agregado.


5
2017-08-23 17:40