jQuery hasAttr checking to see if there is an attribute on an element

Jquery

Jquery Problem Overview


How do you check if there is an attribute on an element in jQuery? Similar to hasClass, but with attr?

For example,

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

Jquery Solutions


Solution 1 - Jquery

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

Solution 2 - Jquery

How about just $(this).is("[name]")?

The [attr] syntax is the CSS selector for an element with an attribute attr, and .is() checks if the element it is called on matches the given CSS selector.

Solution 3 - Jquery

If you will be checking the existence of attributes frequently, I would suggest creating a hasAttr function, to use as you hypothesized in your question:

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

Solution 4 - Jquery

You're so close it's crazy.

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

There's no hasAttr but hitting an attribute by name will just return undefined if it doesn't exist.

This is why the below works. If you remove the name attribute from #heading the second alert will fire.

Update: As per the comments, the below will ONLY work if the attribute is present AND is set to something not if the attribute is there but empty

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

Solution 5 - Jquery

Late to the party, but... why not just this.hasAttribute("name")?

Refer This

Solution 6 - Jquery

The best way to do this would be with filter():

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

It would still be nice to have .hasAttr(), but as it doesn't exist there is this way.

Solution 7 - Jquery

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

I came a crossed this while writing my own function to do the same thing... I though I'd share in case someone else stumbles here. I added null because getAttribute() will return null if the attribute does not exist.

This method will allow you to check jQuery objects and regular javascript objects.

Solution 8 - Jquery

You can also use it with attributes such as disabled="disabled" on the form fields etc. like so:

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

The "rel" attribute stores the id of the target input field.

Solution 9 - Jquery

I wrote a hasAttr() plugin for jquery that will do all of this very simply, exactly as the OP has requested. More information here

EDIT: My plugin was deleted in the great plugins.jquery.com database deletion disaster of 2010. You can look here for some info on adding it yourself, and why it hasn't been added.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionMarkView Question on Stackoverflow
Solution 1 - JquerystragerView Answer on Stackoverflow
Solution 2 - JqueryDomenicView Answer on Stackoverflow
Solution 3 - Jquerykarim79View Answer on Stackoverflow
Solution 4 - JqueryTristan Warner-SmithView Answer on Stackoverflow
Solution 5 - JqueryDomenicView Answer on Stackoverflow
Solution 6 - JqueryJamesM-SiteGenView Answer on Stackoverflow
Solution 7 - JqueryrlemonView Answer on Stackoverflow
Solution 8 - Jqueryuser398341View Answer on Stackoverflow
Solution 9 - Jquerybmarti44View Answer on Stackoverflow