什么是纯 JavaScript 的“hasClass”函数?

IT技术 javascript dom
2021-01-15 12:04:28

你如何hasClass使用普通的 JavaScript 来处理jQuery 例如,

<body class="foo thatClass bar">

询问 if <body>has的 JavaScript 方式是thatClass什么?

6个回答

只需使用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');

浏览器支持:

  • 铬 8.0
  • 火狐 3.6
  • 浏览器 10
  • 歌剧 11.50
  • Safari 5.1

classList 浏览器支持

我同意@AlexanderWigmore,这非常有用且简单。
2021-03-16 12:04:28
@iono 在MDNElement.classList实现描述中,有一个垫片可以将对此行为的支持扩展到 IE8 developer.mozilla.org/en-US/docs/Web/API/Element/classList
2021-03-29 12:04:28
这应该是 2020 年以来可接受的答案。因为没有人再谈论 IE8/WinXP。
2021-04-02 12:04:28
同意。.. IE8 已死。IE一般是死的。这应该是前进的方向。
2021-04-02 12:04:28
这在 IE8 中不受支持IE8 可以检索.classList为字符串,但它不会识别更现代的方法,例如.classList.contains()
2021-04-07 12:04:28

您可以检查是否element.className匹配/\bthatClass\b/
\b匹配断字。

或者,您可以使用 jQuery 自己的实现:

var className = " " + selector + " ";
if ( (" " + element.className + " ").replace(/[\n\t]/g, " ").indexOf(" thatClass ") > -1 ) 

要回答更一般的问题,您可以查看github上的 jQuery源代码hasClass在此源查看器中专门查看源代码

+1 用于 jQuery 实现(用于查找(这是正确的英语吗?)rclass实际上是什么;))
2021-03-17 12:04:28
当最初的问题是要求非 jQuery 实现时,这个讨论是如何变成 jQuery 的?
2021-03-19 12:04:28
不会\b匹配“thatClass-anotherClass”?
2021-04-01 12:04:28
@FelixSchwarz 是对的,在当前的 jQuery 中,正则表达式已更新为/[\t\r\n\f]/g. 另外值得一提的是/\bclass\b/,带有-减号的类名可能会失败(除了它工作正常),这就是为什么 jQuery 的实现更好、更可靠的原因。例如:/\bbig\b/.test('big-text')返回 true 而不是预期的 false。
2021-04-02 12:04:28
只是为了完整性:最近版本中的 rclass 是 "/[\n\t\r]/g" (\r 添加)
2021-04-07 12:04:28

最有效的一种衬垫

  • 返回一个布尔值(与 Orbling 的答案相反)
  • 在搜索thisClass具有class="thisClass-suffix".
  • 与至少 IE6 的所有浏览器兼容

function hasClass( target, className ) {
    return new RegExp('(\\s|^)' + className + '(\\s|$)').test(target.className);
}

// 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>

@greg_diesel:不要气馁!非常欢迎针对常见问题的新解决方案。
2021-04-01 12:04:28
@Raveren 虽然欢迎旧问题的新解决方案,但这个特定的答案没有带来任何新的东西。它只会给这个问题增加噪音。
2021-04-01 12:04:28
@raveren 这不是一个新的解决方案,它与这个答案相同,但信息较少。
2021-04-03 12:04:28

存储正在使用的类的属性是className.

所以你可以说:

if (document.body.className.match(/\bmyclass\b/)) {
    ....
}

如果您想要一个显示 jQuery 如何做所有事情的位置,我建议:

http://code.jquery.com/jquery-1.5.js

优秀的。match属性来得心应手了!jQuery 真的比 JavaScript 做的更多吗?!如果没有,jQuery 只是一种不必要的速记。
2021-03-15 12:04:28
我认为 classList.contains('className') 是比这更好的解决方案。避免概括埃德温。你应该停止使用太多诸如“总是”和“从不”之类的词
2021-03-18 12:04:28
@animaacija 所有 javascript 库/插件基本上都是 javascript 速记,因为它们是用 javascript 构建的。事情是:速记总是必要的。永远不要重新发明轮子。
2021-03-22 12:04:28
这也匹配myclass-something,因为\b匹配连字符。
2021-04-03 12:04:28