要素にjQueryを使用したCSSクラスがあるかどうかを確認する


173

私はjQueryを使用して、要素に特定のCSSクラスが関連付けられているかどうかを判断する簡単な方法があるかどうかを調べています。

要素のIDと、探しているCSSクラスがあります。ifステートメントで、要素にそのクラスが存在するかどうかに基づいて比較できるようにする必要があるだけです。


1
jQueryなしで実行したい場合は、JavaScriptを使用した「hasClass」ですか?
Oriol

回答:


237

次の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')

4
同意しません。ドキュメントはカテゴリの下に整理されていますが、すべてのメソッドをアルファベット順に簡単に確認することもできます。すべてには例が付いており、コメントセクションでは通常、省略されたものをすべてクリアします。jQueryには多くの優れた機能とユーティリティがあり、それらすべてを発見するにはある程度の学習が必要です。-EDIT-それは理にかなっています、それは確かに長い道のりを歩んでいます。
トラファルマドリアン

1
@Trafalmadorian、状況が変わったため、元のコメントを削除しました。元々は-EDIT-の前にすべてを投稿していましたが、ドキュメントの品質に関する私のコメントはもはや関連性がないと返信しましたが、以前の(MediaWiki)システムを参照していました。次に、以前のコメントを削除し、-EDIT-を使用して処理しました。この整理がもう少し明確で、将来の読者に誤解を与えないように願っています。
まぶたのない状態

@daniloquio、それはあなたが直接api.jquery.comにアクセスした場合です...何らかの理由で、ウェブサイトはまだdocs.jquery.comのひどいwikiバージョンにリンクしています
まぶたのない状態

21

FAQから

elem = $("#elemid");
if (elem.is (".class")) {
   // whatever
}

または:

elem = $("#elemid");
if (elem.hasClass ("class")) {
   // whatever
}

3
.isに注意してください() - - 「現在のコレクションの試合中の要素のどれをベースとされたコレクション内の要素の場合はjQueryのである()メソッドはtrueを返します」bennadel.com/blog/...
ザック・

11

否定については、要素にクラスがないかどうかを知りたい場合は、マークが言ったように単純に行うことができます。

if (!currentPage.parent().hasClass('home')) { do what you want }

3

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+' ')
Blexy 14

1
のでindexOfリターンが-1あるクラスが存在しません。もしそうなら!!-1、それはそうなるでしょうtrue。私がやっているので!!-1+1、それは間違っています。より良い方法はですが...&&!!~(' '+e.className+' ').indexOf(' '+c+' ')、当時は覚えていませんでした。
Ismael Miguel 14

申し訳ありませんが、私は意味...&&~(' '+e.className+' ').indexOf(' '+c+' ')
イスマエルミゲルを

3

ここに着いたが実際にjQueryを使わずにこれを行う方法を探していた人を助けるために:

element.classList.contains('your-class-name')


0
 $('.segment-name').click(function () {
    if($(this).hasClass('segment-a')){
        //class exist
    }
});

0

私の場合、私は「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();
    }
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.