【发布时间】:2010-09-20 18:21:31
【问题描述】:
我正在使用 jQuery,并希望了解是否有一种简单的方法可以确定元素是否具有与之关联的特定 CSS 类。
我有元素的 ID,以及我正在寻找的 CSS 类。我只需要能够在 if 语句中根据元素上该类的存在进行比较。
【问题讨论】:
-
如果你想不用 jQuery,“hasClass” with javascript?
标签: javascript jquery css
我正在使用 jQuery,并希望了解是否有一种简单的方法可以确定元素是否具有与之关联的特定 CSS 类。
我有元素的 ID,以及我正在寻找的 CSS 类。我只需要能够在 if 语句中根据元素上该类的存在进行比较。
【问题讨论】:
标签: javascript jquery css
为了帮助那些来到这里但实际上正在寻找一种免费的 jQuery 方法的人:
element.classList.contains('your-class-name')
【讨论】:
在我的例子中,我使用了 'is' 一个 jQuery 函数,我添加了一个带有不同 css 类的 HTML 元素,我在其中寻找一个特定的类,所以我使用了 "is" 一个好的替代检查动态添加到 html 元素中的类,它已经有其他 css 类,这是另一个不错的选择。
简单示例:
<!--element html-->
<nav class="cbp-spmenu cbp-spmenu-horizontal cbp-spmenu-bottom cbp-spmenu-open" id="menu">somethings here... </nav>
<!--jQuery "is"-->
$('#menu').is('.cbp-spmenu-open');
高级示例:
<!--element html-->
<nav class="cbp-spmenu cbp-spmenu-horizontal cbp-spmenu-bottom cbp-spmenu-open" id="menu">somethings here... </nav>
<!--jQuery "is"-->
if($('#menu').is('.cbp-spmenu-bottom.cbp-spmenu-open')){
$("#menu").show();
}
【讨论】:
$('.segment-name').click(function () {
if($(this).hasClass('segment-a')){
//class exist
}
});
【讨论】:
没有 jQuery:
var hasclass=!!(' '+elem.className+' ').indexOf(' check_class ')+1;
或者:
function hasClass(e,c){
return e&&(e instanceof HTMLElement)&&!!((' '+e.className+' ').indexOf(' '+c+' ')+1);
}
/*example of usage*/
var has_class_medium=hasClass(document.getElementsByTagName('input')[0],'medium');
这比 jQuery 快得多!
【讨论】:
...&&!!((' '+e.classname+' ').indexOf(' '+c+' ')+1),而不仅仅是&&!(' '+e.classname+' ').indexOf(' '+c+' ')?
indexOf 返回-1 是该类不存在。如果我做!!-1,那将是true。因为我在做!!-1+1,所以这将是错误的。更好的方法是...&&!!~(' '+e.className+' ').indexOf(' '+c+' '),但我当时不记得了。
...&&~(' '+e.className+' ').indexOf(' '+c+' ')
查看官方 jQuery FAQ 页面:
How do I test whether an element has perticular class or not
【讨论】:
使用hasClass 方法:
jQueryCollection.hasClass(className);
或
$(selector).hasClass(className);
参数(显然)是一个字符串,表示您正在检查的类,它返回一个布尔值(因此它不像大多数 jQuery 方法那样支持链接)。
注意:如果您传递包含空格的 className 参数,它将与集合元素的 className 字符串逐字匹配。因此,例如,如果您有一个元素,
<span class="foo bar" />
那么这将返回true:
$('span').hasClass('foo bar')
这些将返回false:
$('span').hasClass('bar foo')
$('span').hasClass('foo bar')
【讨论】:
至于否定,如果你想知道一个元素是否没有类,你可以按照 Mark 说的做。
if (!currentPage.parent().hasClass('home')) { do what you want }
【讨论】:
来自FAQ
elem = $("#elemid");
if (elem.is (".class")) {
// whatever
}
或:
elem = $("#elemid");
if (elem.hasClass ("class")) {
// whatever
}
【讨论】: