web-dev-qa-db-ja.com

セレクタがjQueryの何かに一致するかどうかをどのように確認しますか。

Mootoolsでは、if ($('target')) { ... }を実行するだけです。 jQueryのif ($('#target')) { ... }は同じように機能しますか?

431
One Crayon

他のコメント投稿者が最も効率的な方法を提案しているようにそれはようであるようです:

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

絶対にexists()関数を使用する必要がある場合は、時間がかかりますが、次のようにします。

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

それからあなたのコードであなたは使うことができます

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

答えたとおり ここ

702
Pat

いいえ、セレクタが一致したかどうかにかかわらず、jqueryは常にjqueryオブジェクトを返します。あなたは.lengthを使う必要があります

if ( $('#someDiv').length ){

}
82
redsquare

あなたが使用した場合:

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

それができないときに連鎖が可能であったことを意味するでしょう。

これはもっといいだろう

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

私はここで答えている人々のほとんどが質問を全く理解していなかったと思います、さもないと私は間違っているかもしれません。

問題は、「セレクタがjQueryに存在するかどうかを確認する方法」です。

ほとんどの人はこれを「jQueryを使ってDOMに要素が存在するかどうかを調べる方法」と考えています。ほとんど交換できません。

jQueryではカスタムセレクタを作成できますが、初期化する前にeで使用しようとするとどうなるかをここで確認してください。

$(':YEAH');
"Syntax error, unrecognized expression: YEAH"

これに遭遇した後、私はそれが単にチェックの問題であることに気付きました

if ($.expr[':']['YEAH']) {
    // Query for your :YEAH selector with ease of mind.
}

乾杯。

16
skqr

さらに別の方法:

$('#elem').each(function(){
  // do stuff
});
14
PhilT
if ($('#elem')[0]) {
  // do stuff
}
13
Sean Curtis

あるいは

if( jQuery('#elem').get(0) ) {}
3
James

私は好きです

    if (jQuery("#anyElement").is("*")){...}

これは基本的にこの要素が一種の "*"であるかどうかをチェックします(任意の要素)。単なるより明確な構文で、 "is"は "if"の中でより理にかなっています。

1
user1134422
jQuery.fn.exists = function(selector, callback) {
    var $this = $(this);
    $this.each(function() {
        callback.call(this, ($(this).find(selector).length > 0));
    });
};
1
logrox