To check if an element contains a specific class in JavaScript, you can use the classList property (modern approach) or the className property (legacy approach). Below is a detailed explanation with examples for both methods.
1. Using classList.contains() (Modern Method)
The classList property returns a live DOMTokenList of the element’s classes. It provides the contains() method to check if a class exists.
Syntax:
element.classList.contains('className');Example:
<div id="myElement" class="container active">Example Element</div>const element = document.getElementById('myElement');
// Check if the element has the class "active"
if (element.classList.contains('active')) {
  console.log('Element has the class "active"');
} else {
  console.log('Element does NOT have the class "active"');
}Output:
Element has the class "active"Key Points:
- Case Sensitivity: Class names are case-sensitive (e.g., Active≠active).
- Multiple Classes: Works seamlessly with elements that have multiple classes.
- Browser Support: Supported in all modern browsers (IE10+).
2. Using className (Legacy Method)
The className property returns a string of the element’s classes. You can split this string into an array and check for the class.
Syntax:
element.className.split(' ').includes('className');Example:
const element = document.getElementById('myElement');
// Split the className string into an array and check inclusion
const classes = element.className.split(' ');
if (classes.includes('active')) {
  console.log('Element has the class "active"');
}Output:
Element has the class "active"Edge Cases to Handle:
- Extra Spaces: Use trim()to remove leading/trailing spaces.
- Multiple Spaces: Split using a regular expression to handle multiple spaces.
Improved Code:
const classes = element.className.trim().split(/\s+/);
if (classes.includes('active')) {
  // Class exists
}3. Helper Function for className
For reusability, create a helper function to check class existence using className:
function hasClass(element, className) {
  return element.className
    .trim() // Remove leading/trailing spaces
    .split(/\s+/) // Split by one or more spaces
    .includes(className);
}
// Usage
if (hasClass(element, 'active')) {
  console.log('Class found!');
}4. Example Use Cases
Case 1: Toggle a Class Based on Presence
const button = document.querySelector('button');
if (button.classList.contains('disabled')) {
  button.classList.remove('disabled');
} else {
  button.classList.add('disabled');
}Case 2: Check Class in Event Listeners
document.querySelector('.menu-item').addEventListener('click', function(e) {
  if (e.target.classList.contains('active')) {
    e.target.classList.remove('active');
  } else {
    e.target.classList.add('active');
  }
});Comparison of Methods
| Method | Pros | Cons | 
|---|---|---|
| classList.contains | Clean, efficient, handles edge cases | Not supported in IE9 and earlier | 
| className | Works in all browsers | Requires manual handling of spaces | 
Browser Compatibility
- classList: Supported in IE10+, Chrome 8+, Firefox 3.6+, Safari 5.1+.
- className: Works in all browsers.
Best Practices
- Use classList.contains()for modern applications.
- Fallback for Legacy Browsers: Use the classNameapproach if supporting IE9 or older.
- Trim and Split: Always sanitize the classNamestring to avoid false negatives.
Summary
- Modern Approach:
  element.classList.contains('className');- Legacy Approach:
  element.className.trim().split(/\s+/).includes('className');By using these methods, you can reliably check for class existence in JavaScript.