jQuery heeftAttr-controle om te zien of er een attribuut is op een element

Hoe controleer je of er een attribuut op een element in jQuery staat? Vergelijkbaar met hasClass, maar met attr?

Bijvoorbeeld

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

Antwoord 1, autoriteit 100%

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

Antwoord 2, autoriteit 57%

Wat dacht je van gewoon $(this).is("[name]")?

De [attr]syntaxis is de CSS-selector voor een element met een attribuut attr, en .is()controleert of het element het wordt aangeroepen komt overeen met de opgegeven CSS-kiezer.


Antwoord 3, autoriteit 13%

Als u het bestaan van attributen regelmatig gaat controleren, raad ik u aan een hasAttr-functie te maken, die u kunt gebruiken zoals u in uw vraag veronderstelde:

$.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>

Antwoord 4, autoriteit 10%

Je bent zo dichtbij dat het gek is.

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

Er is geen hasAttr, maar als je een attribuut op naam gebruikt, krijg je ongedefinieerd terug als het niet bestaat.

Daarom werkt het onderstaande. Als u het naamkenmerk uit #heading verwijdert, wordt de tweede waarschuwing geactiveerd.

Update:volgens de opmerkingen werkt het onderstaande ALLEENals het kenmerk aanwezig is ENis ingesteld op iets dat niet is als het kenmerk is er maar leeg

<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>

Antwoord 5, autoriteit 7%

Te laat op het feest, maar… waarom niet gewoon this.hasAttribute("name")?

Raadpleeg Dit


Antwoord 6, autoriteit 2%

De beste manier om dit te doen is met filter():

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

Het zou nog steeds leuk zijn om .hasAttr() te hebben, maar omdat het niet bestaat, is er deze manier.


Antwoord 7

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

Ik kwam dit tegen tijdens het schrijven van mijn eigen functie om hetzelfde te doen… Ik dacht dat ik het zou delen voor het geval iemand anders hier struikelt.
Ik heb null toegevoegd omdat getattribute () null retourneert als het attribuut niet bestaat.

Met deze methode kunt u jQuery-objecten en reguliere JavaScript-objecten controleren.


Antwoord 8

U kunt het ook gebruiken met attributen zoals gehandicapten = “uitgeschakeld” op de formuliervelden, enz. Zoals SO:

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

Het kenmerk “REL” slaat de ID van het doelinvoerveld op.


Antwoord 9

Ik schreef een HASATTR () plug-in voor jQuery die dit allemaal heel eenvoudig zal doen, precies zoals het OP heeft gevraagd. Meer informatie hier

bewerken:
Mijn plug-in is verwijderd in de Great Plug-ins.jQuery.com Database-deletiestier van 2010. U kunt hier Voor wat informatie over het toevoegen van het zelf, en waarom het niet is toegevoegd.

Other episodes