Check if an element contains a class in JavaScript?

后端 未结 27 3048
面向向阳花
面向向阳花 2020-11-22 09:36

Using plain JavaScript (not jQuery), Is there any way to check if an element contains a class?

Currently, I\'m doing this:

27条回答
  •  星月不相逢
    2020-11-22 10:24

    I've created a prototype method which uses classList, if possible, else resorts to indexOf:

    Element.prototype.hasClass = Element.prototype.hasClass || 
      function(classArr){
        var hasClass = 0,
            className = this.getAttribute('class');
      
        if( this == null || !classArr || !className ) return false;
      
        if( !(classArr instanceof Array) )
          classArr = classArr.split(' ');
    
        for( var i in classArr )
          // this.classList.contains(classArr[i]) // for modern browsers
          if( className.split(classArr[i]).length > 1 )  
              hasClass++;
    
        return hasClass == classArr.length;
    };
    
    
    ///////////////////////////////
    // TESTS (see browser's console when inspecting the output)
    
    var elm1 = document.querySelector('p');
    var elm2 = document.querySelector('b');
    var elm3 = elm1.firstChild; // textNode
    var elm4 = document.querySelector('text'); // SVG text
    
    console.log( elm1, ' has class "a": ', elm1.hasClass('a') );
    console.log( elm1, ' has class "b": ', elm1.hasClass('b') );
    console.log( elm1, ' has class "c": ', elm1.hasClass('c') );
    console.log( elm1, ' has class "d": ', elm1.hasClass('d') );
    console.log( elm1, ' has class "a c": ', elm1.hasClass('a c') );
    console.log( elm1, ' has class "a d": ', elm1.hasClass('a d') );
    console.log( elm1, ' has class "": ', elm1.hasClass('') );
    
    console.log( elm2, ' has class "a": ', elm2.hasClass('a') );
    
    // console.log( elm3, ' has class "a": ', elm3.hasClass('a') );
    
    console.log( elm4, ' has class "a": ', elm4.hasClass('a') );

    This is a test string

    SVG Text Example

    Test page

提交回复
热议问题