Skip to content Skip to sidebar Skip to footer

Check If Element Contains Any Of The Class From Array

I have the following elements:
&

Solution 1:

No need of loop over each of the element and each of the class to check it it exists on the element.

You can use regex as follow:

Demo

var arr = ['nine', 'ten', 'eleven'];
var classes = '\\b(' + arr.join('|') + ')\\b',
  regex = newRegExp(classes, 'i');


$('div').each(function() {
  var elClasses = ' ' + $(this).attr('class').replace(/\s+/, ' ') + ' ';
  if (regex.test(elClasses)) {
    $(this).addClass('valid');
  }
})
div {
  color: red;
}
.valid {
  color: green;
}
<scriptsrc="https://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script><divclass="one two three four five six seven eight">Invalid</div><divclass="one two three four five six seven eight ten">Valid Ten</div><divclass="one two three four five six seven eight">Invalid</div><divclass="one two three four five six seven eight">Invalid</div><divclass="one two three four five six seven eight eleven">Valid 11</div><divclass="one two three four five six seven eight nine">Valid 9</div>

REGEX EXPLANATION

  1. \b: Will match the word boundary
  2. |: Works as OR in regex
  3. arr.join('|'): Will join all the elements of array using | to join
  4. (): Capturing Group. In this case used for matching one of the class

So, regex in above case will be

/\b(nine|ten|eleven)\b/

Solution 2:

functioncheckClasses () {
    var tagsWithClasses = [];
    $.each($("div"), function( index, value ){
         for (i=0; i<obj.length; i++) {
              if ($(value).hasClass(obj[i])) {
                    tagsWithClasses.push($(value));
                    continue;
              }
         }
    });

    return tagsWithClasses;
}

Solution 3:

$('div').each(function () {
    var found = false;
    var element_classes = $(this)[0].className.split(/\s+/);

    // Loop each class the element hasfor (var i = 0; i < element_classes.length; i++) {
        // Check if each class from the element is within the array of classes we want to matchif (['nine', 'ten', 'eleven'].indexOf(element_classes[i]) !== -1) {
            // We found a match, break out of the loop
            found = true;
            break;
        }
    }

    // check if found or notif (found) {
        // Was found
    }
    else {
        // Was not found
    }

});

Solution 4:

var obj = ['nine', 'ten', 'eleven'];
var divs =[];
$.each(obj,function(key,value){

  var values = value;
  $(div).each(function(){
  var divId = $(this).attr('id');  // Giving some separate id for the div to track itvar getClass = $(this).attr('class');

  if(getClass.indexOf(values) >= 0) {
    div.push("divId");
  }
 });
});

You can loop through the elements and the the result

Solution 5:

How do I check if any of these elements has one of the classes in the array

You'd have to iterate over elements and classes, and check if each element contain any of the classes in the array, something like this

var elements = $('div');
var obj      = ['nine', 'ten', 'eleven'];

var hasClass = elements.filter(function(index, elem) {
    return obj.some(function(klass) {
        return elem.classList.contains(klass);
    });
}).length > 0;

You could easily make that into a function

functionhasClass(elements, classes) {
    return elements.filter(function(index, elem) {
        return classes.some(function(klass) {
            return elem.classList.contains(klass);
        });
    }).length > 0;
}

FIDDLE

Using Array.some and Element.classList.contains to avoid uneccessary iteration and slow matching of classnames.

Post a Comment for "Check If Element Contains Any Of The Class From Array"