Check if element contains any of the class from array

后端 未结 6 1027
一整个雨季
一整个雨季 2021-01-17 06:28

I have the following elements:

相关标签:
6条回答
  • 2021-01-17 07:07
    function checkClasses () {
        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;
    }
    
    0 讨论(0)
  • 2021-01-17 07:09
    $('div').each(function () {
        var found = false;
        var element_classes = $(this)[0].className.split(/\s+/);
    
        // Loop each class the element has
        for (var i = 0; i < element_classes.length; i++) {
            // Check if each class from the element is within the array of classes we want to match
            if (['nine', 'ten', 'eleven'].indexOf(element_classes[i]) !== -1) {
                // We found a match, break out of the loop
                found = true;
                break;
            }
        }
    
        // check if found or not
        if (found) {
            // Was found
        }
        else {
            // Was not found
        }
    
    });
    
    0 讨论(0)
  • 2021-01-17 07:11
    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 it
      var getClass = $(this).attr('class');
    
      if(getClass.indexOf(values) >= 0) {
        div.push("divId");
      }
     });
    });
    

    You can loop through the elements and the the result

    0 讨论(0)
  • 2021-01-17 07:11

    Question depends on what you are trying to do.

    If you are trying to create a collection of those elements you can create a selector from the array:

    var elemCollection = $(  '.' + obj.join(',.') ).doSomething();
    

    Can also be used in filter()

    $existingElementCollection.filter(  '.' + obj.join(',.') ).doSomething();
    

    Or can be used in is()

    var filterSelector =  '.' + obj.join(',.');
    $someCollection.each(function(){
       if($(this).is( filterSelector ){
         // do somthing for matches
       }
    });
    

    DEMO

    0 讨论(0)
  • 2021-01-17 07:12

    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

    function hasClass(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.

    0 讨论(0)
  • 2021-01-17 07:31

    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 = new RegExp(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;
    }
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
    <div class="one two three four five six seven eight">Invalid</div>
    <div class="one two three four five six seven eight ten">Valid Ten</div>
    <div class="one two three four five six seven eight">Invalid</div>
    <div class="one two three four five six seven eight">Invalid</div>
    <div class="one two three four five six seven eight eleven">Valid 11</div>
    <div class="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/
    
    0 讨论(0)
提交回复
热议问题