jQueryの「存在する」関数はありますか?


2778

jQueryで要素の存在を確認するにはどうすればよいですか?

私が持っている現在のコードはこれです:

if ($(selector).length > 0) {
    // Do something
}

これに取り組むよりエレガントな方法はありますか?おそらくプラグインか関数か?

回答:


2490

JavaScriptでは、すべてが「真実」または「虚偽」であり、数値0(およびNaN)のfalse場合、それ以外はすべてですtrue。だからあなたは書くことができます:

if ($(selector).length)

その>0部分は必要ありません。


52
@ abhirathore2006 idセレクターを使用していて、要素が存在しない場合、長さは0であり、例外はスローされません。
Robert

14
興味深いことに、十分NaN != falseです。
Robert

35
@ロバートと[] + []= ""...ああ、私はjavascriptが大好きです
ジェームズ

9
@ジェームズそれは[].toString() === [].join(',') === """" === ""です。
Ismael Miguel

5
@Robertおよびtypeof NaN == 'number'
oriadam 2018年

1356

はい!

jQuery.fn.exists = function(){ return this.length > 0; }

if ($(selector).exists()) {
    // Do something
}

これは、以下に対応するものです。JeffAtwoodによるHerding Codeポッドキャスト


254
私はただ書きます: '> 0'なしのif($(selector).length){...}
vsync

369
あなたの$.fn.exists例では、プロパティルックアップ(安い!)を2つの関数呼び出しに置き換えています。
C Snover、2010年

212
@redsquare:コードの読みやすさは、jQueryにこの種の関数を追加するための最良の根拠です。セマンティクスが同一の結果と一致する場合でも.exists、呼び出されたものはきれいに.length読み取られますが、意味的に異なるものとして読み取られます。
Ben Zotto 2010

48
@quixoto、申し訳ありませんが、.lengthは、ラッピングを必要としない多くの言語にわたる標準です。他にどのように.lengthを解釈しますか?
redsquare 2010

144
私の意見では、これは、「リストの長さがゼロより大きい」という概念から、「セレクターを作成した要素が存在する」という概念への少なくとも1つの論理的な間接化です。ええ、それらは技術的には同じものですが、概念の抽象化は異なるレベルにあります。これにより、パフォーマンスコストがいくらか高くても、より明示的なインジケーターを好む人もいます。
ベンゾット2010

377

使用した場合

jQuery.fn.exists = function(){return ($(this).length > 0);}
if ($(selector).exists()) { }

それが不可能な場合でも連鎖が可能であったことを意味します。

これは良いでしょう:

jQuery.exists = function(selector) {return ($(selector).length > 0);}
if ($.exists(selector)) { }

または、FAQから

if ( $('#myDiv').length ) { /* Do something */ }

以下を使用することもできます。jQueryオブジェクト配列に値がない場合、配列の最初の項目を取得すると未定義が返されます。

if ( $('#myDiv')[0] ) { /* Do something */ }

11
最初の方法は読みやすくなります。$( "a")。exists()は、「<a>要素が存在する場合」と読み取ります。$ .exists( "a")は、「<a>要素が存在する場合」と読み取ります。
ストレッジャー2009年

16
trueですが、繰り返しになりますが、連鎖が可能であることを示唆しているので、$(selector).exists()。css( "color"、 "red")などを実行しようとしても機能しません。 *(
ジョンエリクソン、

19
attrやdata関数のように、連鎖できないメソッドはすでに存在します。私はあなたの要点を理解していますが、その価値のために、とにかく長さ> 0をテストします。
Matthew Crumley、

39
なぜこれを連鎖させる必要があるのですか? $(".missing").css("color", "red")すでに正しいことをしています(つまり、何もしません)
Ben Blank

15
チェーンに関するものは完全に完全です- 新しいjQueryオブジェクト以外のものを返すため、チェーンしない多くのjQuery $.fnメソッドがあります。
アルニタク2014

136

あなたはこれを使うことができます:

// if element exists
if($('selector').length){ /* do something */ }

// if element does not exist
if(!$('selector').length){ /* do something */ }

134
TimBütheがあなたに2年前にこの答えをすでに与えていたことに気づきませんでしたか?
Th4tガイ2014

101
Pfft、Timは、要素が存在しないかどうかをテストする方法を示したことはありません。
ジェレミーW

1
あなたは人生の「他の」を意味しますか?私のQはこれです。エラー、存在する必要があります。そうでない場合、セレクターが一致しません。長さは不必要です。
RichieHH 2017

26
この回答とコメントは、stackoverflowがどのように機能するかを要約しています
aswzen

101

存在を確認する最も速く、最も意味的に自己説明的な方法は、実際にはplainを使用することですJavaScript

if (document.getElementById('element_id')) {
    // Do something
}

jQueryの長さの代替よりも書くのに少し時間がかかりますが、それはネイティブJSメソッドであるため、実行が速くなります。

そして、それはあなた自身のjQuery関数を書く代替手段よりも優れています。@snoverが述べた理由により、その代替手段はより低速です。しかし、それはまた、exists()関数がjQueryに固有の何かであるという印象を他のプログラマーに与えるでしょう。JavaScript知識の負債を増やすことなく、コードを編集している他の人が理解する/理解する必要があります。

注:の前に「#」がないことに注意してくださいelement_id(これはプレーンJSであるため、ではありませんjQuery)。


56
まったく同じことではありません。jQueryセレクターは、たとえば、CSSルールに使用できます$('#foo a.special')。そして、それは複数の要素を返すことができます。getElementByIdそれに近づき始めることができません。
kikito 2012年

7
それはセレクターほど広くは適用できないという点で正しいです。ただし、最も一般的なケース(単一の要素が存在するかどうかの確認)では、これは非常にうまく機能します。自己説明と速度の議論はまだ残っています。
マグネ2012年

29
@Noz if(document.querySelector("#foo a.special"))は機能します。jQueryは必要ありません。
Blue Skies

34
JSエンジンの速度に関する議論は、jQueryなしでは機能できない人々の頭の中でしか死にません。なぜなら、それは彼らが勝てない議論だからです。
Blue Skyes

22
document.getElementByIdがすべてだった古き良き時代を覚えていますか?そして、私はいつもドキュメントを忘れていました。それが機能しない理由を理解できませんでした。そして、私はいつもそれを間違って綴り、文字の大文字小文字を間違えました。
JustJohn 2014年

73

次のように書くことで数バイトを節約できます:

if ($(selector)[0]) { ... }

これは、作品たちから最初の項目を取得するために、配列参照解除演算子を使用することができるように、各jQueryオブジェクトはまた、配列になりすましているため、アレイundefined指定されたインデックスにアイテムがない場合に返されます。


1
私はこの正確な答えを投稿するためにここに来ました...必須のフィドル:jsfiddle.net/jasonwilczak/ekjj80gy/2
JasonWilczak

3
@JasonWilczak代わりにコメントしないでください:.eq [0]または.first()は、型キャストではなく、最初に見つかった要素を参照しますか?
Jean Paul AKA el_vete 2015

5
いいえ、jQuery.first()またはjQuery.eq(0)両方がオブジェクトを返す場合、オブジェクトは空っぽなものでも真実です。であるように、この例では、これらの機能を使用できない理由を示すべきである:if(jQuery("#does-not-exist").eq(0)) alert("#does-not-exist exists")
サルマンA

1
正しい。.eq(0)長さ1または0に切り捨てられた別のjQueryオブジェクトのみを返します。.first()はの便利なメソッドです.eq(0)。ただし.get(0)、最初のDOM要素を返しますor undefinedおよびand はと同じ[0]です。jQueryオブジェクトの最初のDOM要素は、という名前の通常のオブジェクトプロパティに格納されます'0'。これは、単純なプロパティアクセスです。唯一の型キャストは、数値0から文字列への暗黙的な変換から生じます'0'。したがって、型キャストが問題である場合は、$.find(selector)['0']代わりに使用できます。
Robert

66

以下を使用できます。

if ($(selector).is('*')) {
  // Do something
}

A 少しよりエレガントな、多分。


38
これは、そのような単純なことには多すぎます。TimBütheの回答を参照
vsync 2009年

これが正解です。「長さ」メソッド例えば、それは任意の数の偽陽性を与えるという問題があります:$(666).LENGTH // 1を返し、それが有効なセレクタではありません
earnaz

これは非常に単純なタスクでは非常に高価です。.is()の場合はjquery実装を調べるだけで、この単純な質問に答えるために処理する必要のあるコードの量がわかります。また、正確に何を実行するかが明確でないため、問題のソリューションと同じか、おそらくエレガントではありません。
micropro.cz

1
@earnaz素晴らしい点、いいキャッチ。しかし、それが実際に価値のある懸念事項であるかはわかりません。要素を特定する開発者には、666おそらくコードが壊れている他の多くの理由があります。これは無効なセレクターですが、$(666).length は有効なJavaScriptです。これは真と評価されるため、条件を満たす必要があります。
トッド

@earnazは​​その特定のケースを回避するために$.find(666).length機能します。
Emile Bergeron、2016年

66

このプラグインは、次のifようなステートメントで使用できます。if ($(ele).exist()) { /* DO WORK */ }、コールバックます。

プラグイン

;;(function($) {
    if (!$.exist) {
        $.extend({
            exist: function() {
                var ele, cbmExist, cbmNotExist;
                if (arguments.length) {
                    for (x in arguments) {
                        switch (typeof arguments[x]) {
                            case 'function':
                                if (typeof cbmExist == "undefined") cbmExist = arguments[x];
                                else cbmNotExist = arguments[x];
                                break;
                            case 'object':
                                if (arguments[x] instanceof jQuery) ele = arguments[x];
                                else {
                                    var obj = arguments[x];
                                    for (y in obj) {
                                        if (typeof obj[y] == 'function') {
                                            if (typeof cbmExist == "undefined") cbmExist = obj[y];
                                            else cbmNotExist = obj[y];
                                        }
                                        if (typeof obj[y] == 'object' && obj[y] instanceof jQuery) ele = obj[y];
                                        if (typeof obj[y] == 'string') ele = $(obj[y]);
                                    }
                                }
                                break;
                            case 'string':
                                ele = $(arguments[x]);
                                break;
                        }
                    }
                }

                if (typeof cbmExist == 'function') {
                    var exist =  ele.length > 0 ? true : false;
                    if (exist) {
                        return ele.each(function(i) { cbmExist.apply(this, [exist, ele, i]); });
                    }
                    else if (typeof cbmNotExist == 'function') {
                        cbmNotExist.apply(ele, [exist, ele]);
                        return ele;
                    }
                    else {
                        if (ele.length <= 1) return ele.length > 0 ? true : false;
                        else return ele.length;
                    }
                }
                else {
                    if (ele.length <= 1) return ele.length > 0 ? true : false;
                    else return ele.length;
                }

                return false;
            }
        });
        $.fn.extend({
            exist: function() {
                var args = [$(this)];
                if (arguments.length) for (x in arguments) args.push(arguments[x]);
                return $.exist.apply($, args);
            }
        });
    }
})(jQuery);

jsFiddle

1つまたは2つのコールバックを指定できます。最初の要素は要素が存在する場合に起動し、2番目の要素は要素が存在しない場合に起動します。ただし、関数を1つだけ渡すことを選択した場合、要素が存在する場合にのみ関数が起動します。したがって、選択した要素が失敗しない場合、チェーンは停止します存在します。もちろん、それが存在する場合、最初の関数が実行され、チェーンが続行されます。

コールバックバリアントを使用すると、連鎖性の維持に役立ちます。と連鎖てください。要素が返され、他のjQueryメソッドと同様にコマンドの連鎖を継続できます。

使用例

if ($.exist('#eleID')) {    /*    DO WORK    */ }        //    param as STRING
if ($.exist($('#eleID'))) { /*    DO WORK    */ }        //    param as jQuery OBJECT
if ($('#eleID').exist()) {  /*    DO WORK    */ }        //    enduced on jQuery OBJECT

$.exist('#eleID', function() {            //    param is STRING && CALLBACK METHOD
    /*    DO WORK    */
    /*    This will ONLY fire if the element EXIST    */
}, function() {            //    param is STRING && CALLBACK METHOD
    /*    DO WORK    */
    /*    This will ONLY fire if the element DOES NOT EXIST    */
})

$('#eleID').exist(function() {            //    enduced on jQuery OBJECT with CALLBACK METHOD
    /*    DO WORK    */
    /*    This will ONLY fire if the element EXIST    */
})

$.exist({                        //    param is OBJECT containing 2 key|value pairs: element = STRING, callback = METHOD
    element: '#eleID',
    callback: function() {
        /*    DO WORK    */
        /*    This will ONLY fire if the element EXIST    */
    }
})

1
コールバックバージョンでは、Has Itemsコールバックは実際には引数としてオブジェクトを渡すべきではありませんか?
Chris Marisic

62

ここでの答えのほとんどは正確ではないようです。要素の長さをチェックします。多くの場合問題はありません、100%はない可能性があります。代わりに数値が関数に渡されるとしたら、すべてをチェックする関数のプロトタイプを作成します条件を設定し、本来あるべき答えを返します。

$.fn.exists = $.fn.exists || function() { 
  return !!(this.length && (this[0] instanceof HTMLDocument || this[0] instanceof HTMLElement)); 
}

これにより、長さとタイプの両方がチェックされます。これで、次のようにチェックできます。

$(1980).exists(); //return false
$([1,2,3]).exists(); //return false
$({name: 'stackoverflow', url: 'http://www.stackoverflow.com'}).exists(); //return false
$([{nodeName: 'foo'}]).exists() // returns false
$('div').exists(); //return true
$('.header').exists(); //return true
$(document).exists(); //return true
$('body').exists(); //return true

55

jQueryは本当に必要ありません。単純なJavaScriptを使用すると、次の点を確認することが簡単かつ意味的に正しくなります。

if(document.getElementById("myElement")) {
    //Do something...
}

何らかの理由で要素にidを付けたくない場合でも、DOMにアクセスするように設計された他のJavaScriptメソッドを使用できます。

jQueryは本当にかっこいいですが、純粋なJavaScriptが忘却に陥らないようにしてください...


5
私は知っています:それは元の質問(jquery関数を要求する)に直接は答えませんが、その場合の答えは「いいえ」または「意味的に正しい解決策ではない」でしょう。
amypellegrini、2011年

親セレクターが必要な場合はどうなります:has()か?
КонстантинВан

54

あなたはこれを使うことができます:

jQuery.fn.extend({
    exists: function() { return this.length }
});

if($(selector).exists()){/*do something*/}

43

上記のすべての回答に.lengthパラメーターが必要な理由は、それらのほとんどが$()、カーテンの後ろにquerySelectorAllがあるjqueryのセレクターを使用している(または直接使用している)ためです。このメソッドは、DOMツリー全体を解析してすべてを探す必要があるため、かなり低速です。てそのセレクターとの一致を検索し、それらを配列に入力するです。

['length']パラメータは不要または有用ではありません。document.querySelector(selector)代わりに直接使用すると、一致する最初の要素を返すか、見つからない場合はnullを返すため、コードははるかに高速になります。

function elementIfExists(selector){  //named this way on purpose, see below
    return document.querySelector(selector);
}
/* usage: */
var myelement = elementIfExists("#myid") || myfallbackelement;

ただし、このメソッドを使用すると、実際のオブジェクトが返されます。変数として保存して繰り返し使用しない場合は問題ありません(したがって、忘れた場合でも参照を保持します)。

var myel=elementIfExists("#myid");
// now we are using a reference to the element which will linger after removal
myel.getParentNode.removeChild(myel);
console.log(elementIfExists("#myid")); /* null */
console.log(myel); /* giant table lingering around detached from document */
myel=null; /* now it can be garbage collected */

これが望ましい場合もあります。次のようなforループで使用できます。

/* locally scoped myel gets garbage collected even with the break; */
for (var myel; myel = elementIfExist(sel); myel.getParentNode.removeChild(myel))
    if (myel == myblacklistedel) break;

実際に要素が必要なく、true / falseだけを取得/保存したい場合は、それを2倍にしてください!! ほどかれた靴でも機能するので、なぜここに結び目を作るのですか?

function elementExists(selector){
    return !!document.querySelector(selector);
}
/* usage: */
var hastables = elementExists("table");  /* will be true or false */
if (hastables){
    /* insert css style sheet for our pretty tables */
}
setTimeOut(function (){if (hastables && !elementExists("#mytablecss"))
                           alert("bad table layouts");},3000);

40

$.contains()あなたが欲しいのは何ですか?

jQuery.contains( container, contained )

$.contains()第二引数で与えられたDOM要素は、それが直接の子であるか、より深くネストされたかどうか、最初の引数で与えられたDOM要素の子孫である場合、メソッドはtrueを返します。それ以外の場合は、falseを返します。要素ノードのみがサポートされています。2番目の引数がテキストまたはコメントノードの場合、$.contains()falseを返します。

:最初の引数は、jQueryオブジェクトやプレーンJavaScriptオブジェクトではなく、DOM要素でなければなりません。


3
これはセレクタを受け入れません。つまり、セレクタを選択する必要があります。つまり、選択の結果を確認するだけで済みます。

39

私はif ($(selector).length) {}不十分であることがわかりました。selectorが空のオブジェクトである場合は、アプリを黙って中断します{}

var $target = $({});        
console.log($target, $target.length);

// Console output:
// -------------------------------------
// [▼ Object              ] 1
//    ► __proto__: Object

私の唯一の提案は、の追加チェックを実行することです{}

if ($.isEmptyObject(selector) || !$(selector).length) {
    throw new Error('Unable to work with the given selector.');
}

これは少し重いので、私はまだより良い解決策を探しています。

編集:警告!selectorが文字列の場合、これはIEでは機能しません。

$.isEmptyObject('hello') // FALSE in Chrome and TRUE in IE

12
$()空のオブジェクトを引数として呼び出す頻度はどれくらいですか。
nnnnnn 2014

@nnnnnn実際にはありません(私はもうjQueryを使用していません)。しかし、3年前には、セレクターを受け取り、そのセレクターの要素の数を返すAPIを公開するケースがあったと思います。別のDEVは、空のオブジェクトを渡したい場合は、それは間違って1で応答することになる
オレグ

3
どうして空のオブジェクト{}を渡すの$()ですか?
すべての労働者は必須

7
@cpburnzなぜ私に尋ねるのですか?私は単なるAPIプロバイダーでした...人々はあらゆる種類の愚かなことをAPIに渡します。
Oleg

4
ちょうど気がついた、@ FagnerBrackが参照したjqueryの問題のスレッドは、彼のコメントの直後に更新された。結局消えないようです。
ジョセフガブリエル

38

要素が存在するかどうかを確認するには、Javaスクリプトで長さを使用します。長さがゼロより大きい場合、要素は存在します長さがゼロの場合、要素は存在しません

// These by Id
if ($("#elementid").length > 0) {
  // Element is Present
} else {
  // Element is not Present
}

// These by Class
if ($(".elementClass").length > 0) {
  // Element is Present
} else {
  // Element is not Present
}

4
if($( '#elementid')。length){}で十分であれば、天気の長さが0より大きいことを確認する必要はありません。
Pranav Labhe、2015

13
あなたは実際に質問を読みましたか?これは、OPが使用している方法とまったく同じです。
A1rPun 2016年

34

要素の存在の確認は、jQueryの公式Webサイト自体にきちんと文書化されています!

セレクターによって返されるjQueryコレクションの.lengthプロパティを使用します。

if ($("#myDiv").length) {
    $("#myDiv").show();
}

要素が存在するかどうかをテストする必要は必ずしもないことに注意してください。次のコードは、要素が存在する場合は要素を表示し、存在しない場合は何もしません(エラーなし)。

$("#myDiv").show();

31

これはすべての回答と非常によく似て!いますが、ブール値を取得できるように演算子を2回使用しないでください。

jQuery.fn.exists = function(){return !!this.length};

if ($(selector).exists()) {
    // the element exists, now what?...
}

2
時々より効率的であることBoolean(x)できるので。

28
$(selector).length && //Do something

19
2バイトを犠牲にして読みやすさを向上させるifwhereの使用を避けるこれらの賢い方法は嫌いifです。
Emile Bergeron、2016年

さらに、ミニファイアはこれらすべてを&&行います。


27

ハイウェイの答えに触発されて、私は次のことを思いつきました。

$.fn.exists = function() {
    return $.contains( document.documentElement, this[0] );
}

jQuery.containsは2つのDOM要素を受け取り、最初の要素に2 番目の要素が含まれているかどうかを確認します。

現在のドキュメント内の要素の存在を確認するためだけに適用したい場合document.documentElement、最初の引数としてを使用すると、existsメソッドのセマンティクスが満たされます。

以下は、私が一緒に比較しスニペット入れているjQuery.exists()反対$(sel)[0]して$(sel).lengthいるの両方の戻りアプローチtruthyの値$(4)しばらく$(4).exists()リターンをfalse。DOM内の要素の存在確認する状況では、これは望ましい結果のようです。


26

jQueryの必要なし(基本的なソリューション)

if(document.querySelector('.a-class')) {
  // do something
}

以下のはるかにパフォーマンスの高いオプション(aクラスの前にドットがないことに注意してください)。

if(document.getElementsByClassName('a-class')[0]) {
  // do something
}

querySelectorは、jQueryで$()(sizzle)のような適切なマッチングエンジンを使用し、より多くの計算能力を使用しますが、99%の場合は問題ありません。2番目のオプションはより明示的で、コードに何をすべきかを正確に伝えます。jsperf https://jsperf.com/getelementsbyclassname-vs-queryselectorall/25によると、はるかに高速です


25

私はこれを行うために単純なバニラJavaScriptを使用したいだけです。

function isExists(selector){
  return document.querySelectorAll(selector).length>0;
}

23

私はこの質問に出くわしました、そして私が現在使用しているコードのスニペットを共有したいと思います:

$.fn.exists = function(callback) {
    var self = this;
    var wrapper = (function(){
            function notExists () {}

            notExists.prototype.otherwise = function(fallback){
                if (!self.length) {                    
                    fallback.call();
                }
            };

            return new notExists;
        })();

    if(self.length) {
        callback.call();    
    }

    return wrapper;
}

そして今、私はこのようなコードを書くことができます-

$("#elem").exists(function(){
    alert ("it exists");
}).otherwise(function(){
    alert ("it doesn't exist");
});

たくさんのコードのように見えるかもしれませんが、CoffeeScriptで記述した場合、コードは非常に小さくなります。

$.fn.exists = (callback) ->
    exists = @length
    callback.call() if exists        
    new class
       otherwise: (fallback) ->            
            fallback.call() if not exists

9
OPの元のアプローチは、これよりもはるかに最小限でエレガントであることがわかりました。OPのメソッドが短く、コールバックを含まない場合、これだけ多くのコードを書くのはやり過ぎのようです。
2014

単純なケースでは-あなたは正しいです。しかし、両方のケースで多くのコードを含むより複雑な状況では、私のアプローチの方が良いと思います。
Eternal1 2014

4
どのような複雑な状況で、このアプローチは単純なif / elseステートメントよりも優れていますか?
Jarvl

19

オブジェクトが別のオブジェクトの内部に存在するかどうかを確認したい場合があったので、セレクター内のセレクターをチェックするために最初の回答に何かを追加しました。

// Checks if an object exists.
// Usage:
//
//     $(selector).exists()
//
// Or:
// 
//     $(selector).exists(anotherSelector);
jQuery.fn.exists = function(selector) {
    return selector ? this.find(selector).length : this.length;
};

18

どうですか:

function exists(selector) {
    return $(selector).length;
}

if (exists(selector)) {
    // do something
}

それは非常に最小限であり、$()毎回セレクターを囲む必要がなくなります。


3
これは、「存在する場合」ではなく「存在する場合」とif($("#thing").exists(){}読みます。また、jQueryの方法ではありません。
1j01 2015年

15

私はこれを使っています:

    $.fn.ifExists = function(fn) {
      if (this.length) {
        $(fn(this));
      }
    };
    $("#element").ifExists( 
      function($this){
        $this.addClass('someClass').animate({marginTop:20},function(){alert('ok')});               
      }
    ); 

jQuery要素が存在する場合にのみチェーンを実行します-http://jsfiddle.net/andres_314/vbNM3/2/


14

ここexistにjQueryの私のお気に入りのメソッドがあります

$.fn.exist = function(callback) {
    return $(this).each(function () {
        var target = $(this);

        if (this.length > 0 && typeof callback === 'function') {
            callback.call(target);
        }
    });
};

セレクタが存在しない場合のコールバックをサポートする他のバージョン

$.fn.exist = function(onExist, onNotExist) {
    return $(this).each(function() {
        var target = $(this);

        if (this.length > 0) {
            if (typeof onExist === 'function') {
                onExist.call(target);
            }
        } else {
            if (typeof onNotExist === 'function') {
                onNotExist.call(target);
            }
        }
    });
};

例:

$('#foo .bar').exist(
    function () {
        // Stuff when '#foo .bar' exists
    },
    function () {
        // Stuff when '#foo .bar' does not exist
    }
);

14

$("selector")は、lengthプロパティを持つオブジェクトを返します。セレクタが要素を見つけると、それらはオブジェクトに含まれます。その長さを確認すると、要素が存在するかどうかを確認できます。JavaScript 0 == falseでは、取得できない場合は0コードが実行されます。

if($("selector").length){
   //code in the case
} 

5
「配列を与える」—いいえ、そうではありません。jQueryオブジェクト(配列といくつかのプロパティを共有する)を提供します。あなたの答えは基本的に2009年のTimBütheの答えと同じです。
クエンティン

11

さまざまな状況の完全な例と、jQueryセレクターが配列または要素を返すため、jQueryセレクターが機能するかどうかに関係なく、direct ifを使用して要素が存在するかどうかを確認する方法の完全な例を次に示します。

var a = null;

var b = []

var c = undefined ;

if(a) { console.log(" a exist")} else { console.log("a doesn't exit")}
// output: a doesn't exit

if(b) { console.log(" b exist")} else { console.log("b doesn't exit")}
// output: b exist

if(c) { console.log(" c exist")} else { console.log("c doesn't exit")}
// output: c doesn't exit

最終的解決

if($("#xysyxxs").length){ console.log("xusyxxs exist")} else { console.log("xusyxxs doesnn't exist") }
//output : xusyxxs doesnn't exist

if($(".xysyxxs").length){ console.log("xusyxxs exist")} else { console.log("xusyxxs doesnn't exist") }
    //output : xusyxxs doesnn't exist

デバッガーで$( "#xysyxxs")を試すことができます。jqueryがnullまたは未定義を返さないことがわかります。したがって、最終的な解決策は機能しません
ベレンジャー

11

あなたはそれがより大きいのですかどうかをチェックする必要はありません0ように$(selector).length > 0$(selector).lengthそれは十分だと要素の存在を確認するためのエレガントな方法。これ以上のことをしたいのであれば、これだけの関数を書くのは価値があるとは思いません。

if($(selector).length){
  // true if length is not 0
} else {
  // false if length is 0
}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.