How to Get all attributes of an element using jQuery
I am trying to go through an element and get all the attributes of that element to output them, for example an tag may have 3 or more attributes, unknown to me and I need to get the names and values of these attributes. I was thinking something along the lines of:
$(this).attr().each(function(index, element) { var name = $(this).name; var value = $(this).value; //Do something with name and value... });
Could anyone tell me if this is even possible, and if so what the correct syntax would be?
Answer
The attributes property contains them all:
$(this).each(function() { $.each(this.attributes, function() { // this.attributes is not a plain object, but an array // of attribute nodes, which contain both the name and value if(this.specified) { console.log(this.name, this.value); } }); });
What you can also do is extending .attr so that you can call it like .attr() to get a plain object of all attributes:
(function(old) { $.fn.attr = function() { if(arguments.length === 0) { if(this.length === 0) { return null; } var obj = {}; $.each(this[0].attributes, function() { if(this.specified) { obj[this.name] = this.value; } }); return obj; } return old.apply(this, arguments); }; })($.fn.attr);
Usage:
var $div = $("<div data-a='1' id='b'>");