jQuery如何hasClass使用普通的JavaScript?例如,
<body class="foo thatClass bar">
什么是JavaScript的方式来询问是否<body>有thatClass?
jQuery如何hasClass使用普通的JavaScript?例如,
<body class="foo thatClass bar">
什么是JavaScript的方式来询问是否<body>有thatClass?
Answers:
您可以检查是否element.className匹配/\bthatClass\b/。
\b匹配一个单词中断。
或者,您可以使用jQuery自己的实现:
var className = " " + selector + " ";
if ( (" " + element.className + " ").replace(/[\n\t]/g, " ").indexOf(" thatClass ") > -1 ) 
为了回答您的一般性问题,您可以在github上查看jQuery的源代码,也可以hasClass在此源代码查看器中查看源代码。
rclass是什么;)
                    \b匹配“ thatClass-anotherClass”吗?
                    /[\t\r\n\f]/g。同样值得一提的是/\bclass\b/,带有-负号的类名可能会失败(除了效果很好),这就是jQuery的实现更好,更可靠的原因。例如:/\bbig\b/.test('big-text')返回true而不是预期的false。
                    只需使用classList.contains():
if (document.body.classList.contains('thatClass')) {
    // do some stuff
}
其他用途classList:
document.body.classList.add('thisClass');
// $('body').addClass('thisClass');
document.body.classList.remove('thatClass');
// $('body').removeClass('thatClass');
document.body.classList.toggle('anotherClass');
// $('body').toggleClass('anotherClass');
浏览器支持:
.classList为字符串,但无法识别更现代的方法,例如.classList.contains()
                    存储使用中的类的属性是className。
所以你可以说:
if (document.body.className.match(/\bmyclass\b/)) {
    ....
}
如果您想要一个可以显示jQuery如何完成所有工作的位置,我建议:
match属性再次派上用场!真的jQuery所做的比JavaScript还要多吗?如果不是这样,jQuery只是不必要的简写形式。
                    myclass-something,\b与连字符匹配。
                    // 1. Use if for see that classes:
if (document.querySelector(".section-name").classList.contains("section-filter")) {
  alert("Grid section");
  // code...
}
<!--2. Add a class in the .html:-->
<div class="section-name section-filter">...</div>
hasClass函数:
HTMLElement.prototype.hasClass = function(cls) {
    var i;
    var classes = this.className.split(" ");
    for(i = 0; i < classes.length; i++) {
        if(classes[i] == cls) {
            return true;
        }
    }
    return false;
};
addClass函数:
HTMLElement.prototype.addClass = function(add) {
    if (!this.hasClass(add)){
        this.className = (this.className + " " + add).trim();
    }
};
removeClass函数:
HTMLElement.prototype.removeClass = function(remove) {
    var newClassName = "";
    var i;
    var classes = this.className.replace(/\s{2,}/g, ' ').split(" ");
    for(i = 0; i < classes.length; i++) {
        if(classes[i] !== remove) {
            newClassName += classes[i] + " ";
        }
    }
    this.className = newClassName.trim();
};
              我使用一种简单/最小的解决方案,一个行,跨浏览器,并且也可以与旧版浏览器一起使用:
/\bmyClass/.test(document.body.className) // notice the \b command for whole word 'myClass'
该方法非常有用,因为它不需要polyfill,如果您使用它们,classList则性能会更好。至少对我来说。
更新:我做了一个很小的polyfill,这是我现在使用的全面解决方案:
function hasClass(element,testClass){
  if ('classList' in element) { return element.classList.contains(testClass);
} else { return new Regexp(testClass).exec(element.className); } // this is better
//} else { return el.className.indexOf(testClass) != -1; } // this is faster but requires indexOf() polyfill
  return false;
}
有关其他类的操作,请参见此处的完整文件。
notmyClassHere吗?
                    !/myClass/.test(document.body.className)注意该!符号。
                    thisIsmyClassHere。
                    使用类似:
Array.prototype.indexOf.call(myHTMLSelector.classList, 'the-class');
              myHTMLSelector.classList.indexOf('the-class')吗?您最后也不想>=0吗?
                    [].indexOfif classList有contains什么意义?
                    myHTMLSelector.classList.indexOf('the-class')返回错误,myHTMLSelector.classList.indexOf is not a function因为myHTMLSelector.classList它不是数组。但是我猜想使用Array.prototype某种转换调用它时会发生。尽管它contains有很好的支持,但它可能支持较旧的浏览器。
                    if (document.body.className.split(/\s+/).indexOf("thatClass") !== -1) {
    // has "thatClass"
}
              此“ hasClass”功能可在IE8 +,FireFox和Chrome中使用:
hasClass = function(el, cls) {
    var regexp = new RegExp('(\\s|^)' + cls + '(\\s|$)'),
        target = (typeof el.className === 'undefined') ? window.event.srcElement : el;
    return target.className.match(regexp);
}
              您如何看待这种方法?
<body class="thatClass anotherClass"> </body>
var bodyClasses = document.querySelector('body').className;
var myClass = new RegExp("thatClass");
var trueOrFalse = myClass.test( bodyClasses );
              class="nothatClassIsnt"吗?
                    这是最简单的方法:
var allElements = document.querySelectorAll('*');
for (var i = 0; i < allElements.length; i++) {
    if (allElements[i].hasAttribute("class")) {
         //console.log(allElements[i].className);
         if (allElements[i].className.includes("_the _class ")) { 
              console.log("I see the class");
         }
    }
}
              
class属性(在多个类的情况下,将以随机顺序将多个类名用空格隔开),并检查您的类名是否在其中。并不是很困难,但是如果不是出于学习目的,还是很不方便:)