jQuery:特定のクラス名のdivが存在するかどうかを確認する


235

jQueryを使用して、プログラムで次divのような一連のを生成しています。

<div class="mydivclass" id="myid1">Some Text1</div>
<div class="mydivclass" id="myid2">Some Text2</div>

私のコードのどこかに、これらのDIVが存在するかどうかを検出する必要があります。divのクラス名は同じですが、IDは各divで異なります。jQueryを使用してそれらを検出する方法はありますか?

回答:


424

次のように、JQueryから返される最初のオブジェクトをチェックすることで、これを簡略化できます。

if ($(".mydivclass")[0]){
    // Do something if class exists
} else {
    // Do something if class does not exist
}

この場合、最初の([0])インデックスに真の値がある場合、クラスが存在すると仮定します。

2013年4月10日編集:ここで jsperfテストケースを作成しました。


良い点です。どちらにしても、それは単なるプロパティルックアップです。私は4つの文字については気にしませんが、これはコンテキストによってはより明確になる可能性があります...
TJクラウダー

うまくいく他のソリューションもありますが、私はこのソリューションを使用することになりました。素早い回答ありがとうございます。
アバター

1
興味深いことに、:firstそこにをスローするとパフォーマンスが向上すると思います(パフォーマンスが@itgorillaの重要な基準であるかどうかはわかりません)が、ブラウザーによって大きく異なるかどうかは、おそらくjQueryが選択。ここではdiv要素が存在するテストケースだし、ここでそれが存在しないものです
TJクラウダー2011

そして、クラスが存在しない場合にコードを実行したくない場合はどうすればよいですか?
トーマスセバスチャン

1
@ThomasSebastian Tryif (!$(".mydivclass")[0]){ /* do stuff */ }
Shaz、

117

を使用できますsize()が、jQueryは長さを使用して別の関数呼び出しのオーバーヘッドを回避することをお勧めします。

$('div.mydivclass').length

そう:

// since length is zero, it evaluates to false
if ($('div.mydivclass').length) {

http://api.jquery.com/size/

http://api.jquery.com/length/

更新

選択された回答はperfテストを使用していますが、perfの一部として要素の選択も含まれているため、多少の欠陥があります。これは、ここではテストされていません。更新されたパフォーマンステストは次のとおりです。

http://jsperf.com/check-if-div-exists/3

テストの最初の実行では、プロパティの取得がインデックスの取得よりも高速であることを示していますが、IMOは無視できます。私はまだ長さを使用することを好みますが、より簡潔な条件ではなく、コードの意図に関してより理にかなっています。


3
jsperf.comのツールに提供したリンクによると、.length現在最高の平均パフォーマンスを提供しています。
gmeben 2013

チェックのパフォーマンスへの影響が最小のサーバー。
David O'Regan

77

jQueryなし:

ネイティブJavaScriptは常に高速になります。この場合:(例)

if (document.querySelector('.mydivclass') !== null) {
    // .. it exists
}

親要素に特定のクラスを持つ別の要素が含まれているかどうかを確認する場合は、次のいずれかを使用できます。(例)

var parent = document.querySelector('.parent');

if (parent.querySelector('.child') !== null) {
    // .. it exists as a child
}

または、.contains()親要素でメソッドを使用できます。(例)

var parent = document.querySelector('.parent'),
    child = document.querySelector('.child');

if (parent.contains(child)) {
    // .. it exists as a child
}

..そして最後に、特定の要素に特定のクラスが含まれているだけかどうかを確認する場合は、次のコードを使用します。

if (el.classList.contains(className)) {
    // .. el contains the class
}

57
$('div').hasClass('mydivclass')// Returns true if the class exist.

3
確かにこれは代替手段ですが、高価です。以前の回答で使用されたアプローチよりも遅くなり(一部のブラウザでは著しく遅くなります)、メモリへの影響も大きくなります(jQueryはページ上のすべてdiv要素の配列を構築してから、戻ってそれらをループして、それらがそのクラスを持っているかどうかを確認します。すべて、最後に配列を破棄します)。
TJクロウダー

3
@tj hasClassは、ここにある他のセレクターより33%高速です。jsperf.com/hasclass00を
フセイン

1
@Hussein:div私が強調した問題(アレイの構築)を回避する、完全に非現実的なテストケース(2つの要素)がある場合のみ。たくさんのdivを使って試してください:jsperf.com/hasclass00/2 Chromeのコピーでは63%遅く、Firefoxのコピーでは43%遅く、Operaでは98%(!)遅くなります。しかし、さらに、セレクターエンジンに必要なすべての情報を提供するよりも、divのリストを作成してから検索する方が遅いことは理にかなっています。
TJクロウダー

1
@フセイン:私は非常に平等であり、あなたの主張に対してバランスの取れた反証を提示したことに注意してください。前回もそうだった神経に触れたらすみません。リラックスしてください。それは個人的な侮辱ではなく、技術的な議論です。StackOverflowでは、厚いスキンとオープンマインドが役立ちます。
TJクラウダー、

1
@Hussein:HTML5のcssセレクターは、これがほぼ確実にこれを行うための可能な最悪の方法であることを意味します。投稿を削除するだけではない場合は-1。
ステファンケンドール



10

div要素を明示的にテストするには:

if( $('div.mydivclass').length ){...}


これは.mydivclass、ブラウザとjQueryのバージョンに依存するよりも少し遅いかもしれません。
Stefan Kendall

確かに、しかしOPは特に「jQuery- 特定のクラス名のdivが存在するかどうかを確認する」(私の強調)と言っていたのでdiv、セレクターの一部を実際に最初にインクルードするという私の投票を獲得します。
TJクラウダー、

7

簡単なコードを以下に示します。

if ($('.mydivclass').length > 0) {
   //Things to do if class exist
}

特定のIDを持つdivを非表示にするには:

if ($('#'+given_id+'.mydivclass').length > 0) {
   //Things to do if class exist
}

3

ここにいくつかの方法があります:

1.  if($("div").hasClass("mydivclass")){
    //Your code

    //It returns true if any div has 'mydivclass' name. It is a based on the class name
    }

2. if($("#myid1").hasClass("mydivclass")){
    //Your code


    //  It returns true if specific div(myid1) has this class "mydivclass" name. 
    //  It is a  based on the specific div id's.
    }           
3. if($("div[class='mydivclass']").length > 0){
    //Your code

   // It returns all the divs whose class name is "mydivclass"
   //  and it's length would be greater than one.
    }

要件に基づいて定義された方法のいずれかを使用できます。


2
if ($(".mydivclass").size()){
   // code here
}

このsize()メソッドは、jQueryセレクターが選択する要素の数(この場合はクラスを持つ要素の数)を返すだけmydivclassです。0を返す場合、式はfalseであるため何もありません。他の数値を返す場合、divが存在する必要があります。


1
lengthプロパティがあるときにメソッドを呼び出すのはなぜですか?また、これは、だけでなく、そのクラスの要素をチェックしますdiv。(今、それはOPが意味したことかもしれませんが、彼/彼女が言ったことではありません。)OPが実際に言ったことを実行するStefan Kendallの回答を参照してください(ただし、繰り返しますが、彼らはあなたがしたことを意味しているかもしれません)。
TJクロウダー

1
@TJ Crowder:まあ、個人的な好みです-size()メソッドが存在しているように感じます-使用しないでください。関数を呼び出す際の余分なオーバーヘッド(ループで1000回実行しない限り)はごくわずかなので、コードを少しわかりやすくすることにします。2番目の点-はい、元の回答を変更してdivパーツを削除しました。2つの理由があります。1)セレクターが、OPがdiv要素を使用するという事実に限定されていない(将来変更される可能性がある)、および2)でほとんどのブラウザとjQueryのバージョン、AFAIK、これはより高速になるはずです。
Herman Schaaf

「私はちょうどsize()メソッドが存在するように感じます-なぜそれを使用しないのですか」ええと、大丈夫です。lengthそれを使用しない理由プロパティは、ありますか?しかし、それがあなたの好みであれば、公平な態度です。もう1つは、あなたがそれを編集したことを知りませんでした。私がそれをするつもりなら、私はそれを残しました(再び、彼は特に「... div with ...」(私の強調)を具体的に言った後、それが問題ではないかどうかに関係なく、だったdivかどうか、あなたはその部分を捨てることができしかし、何:-)。。
TJクラウダー

@TJクラウダー:うん、私たちはこれを考えすぎていると思います。
Herman Schaaf

@TJ Crowder:しかし、私の弁護では、これは議論の場でsize()はありません。古い配列だけでなく、jQueryセレクターで要素の数をカウントしていることを明確にするためのメソッドがあると思います。しかし、繰り返しますが、それは私の好みです。
Herman Schaaf

2

divが特定のクラスで存在するかどうかを確認します

if ($(".mydivclass").length > 0) //it exists 
{

}

2
if($(".myClass")[0] != undefined){
  // it exists
}else{
  // does not exist
}

2
この既存の回答とほぼ同じようです。
2017

はい、そうです...しかし、私はその答えを試しましたが、うまくいきませんでした。比較を「未定義」に追加すると、完全に機能するように見えました。
階段2017

2
var x = document.getElementsByClassName("class name");
if (x[0]) {
alert('has');
} else {
alert('no has');
}

このコードは質問に答えることがありますが、このコードが質問に答える理由や方法に関する追加のコンテキストを提供すると、長期的な価値が向上します。
Vishal Chhodwani

2

Jqueryでは、このように使用できます。

if ($(".className")[0]){

   // Do something if class exists

} else {

// Do something if class does not exist

}

JavaScriptを使用

if (document.getElementsByClassName("className").length > 0) {

// Do something if class exists

}else{

    // Do something if class does not exist

}

2

JavaScriptのチェッククラス(hasClass)の非常にサンプルのソリューションを次に示します。

const mydivclass = document.querySelector('.mydivclass');
// if 'hasClass' is exist on 'mydivclass'
if(mydivclass.classList.contains('hasClass')) {
   // do something if 'hasClass' is exist.
}

1

JavaScriptでの最良の方法:

if (document.getElementsByClassName("search-box").length > 0) {
// do something
}


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.