In jQuery, .prop() and .attr() are both used to get or set values on HTML elements, but they behave differently because they target different kinds of properties.
1. .attr() — Attribute
-
Purpose: Works with HTML attributes, the values defined in the HTML markup.
-
Examples of attributes: id, href, src, class, title, disabled, checked.
-
Behavior:
<input type="checkbox" id="check" checked>
// Using .attr()
console.log($('#check').attr('checked')); // "checked" (as per HTML)
$('#check').attr('checked', false); // Removes checked attribute in HTML
2. .prop() — Property
-
Purpose: Works with DOM properties, the actual current state of the element in the browser.
-
Examples of properties: checked, selected, disabled, value.
-
Behavior:
-
Reflects the current state of the element, not just the HTML markup.
-
Useful for checkboxes, radios, and other dynamic elements.
// Using .prop()
console.log($('#check').prop('checked')); // true or false (current state)
$('#check').prop('checked', false); // Unchecks the checkbox
Key Differences
| Feature |
.attr() |
.prop() |
| Works on |
HTML attributes |
DOM properties |
| Returns |
Original attribute value |
Current property value |
| Common use |
href, id, title |
checked, selected, disabled |
| Changes reflect |
Markup only |
Actual DOM state |
Rule of thumb:
-
Use .attr() for static attributes you set in HTML.
-
Use .prop() for dynamic properties like checkboxes, radios, or disabled states.