web-dev-qa-db-fra.com

Comment vérifier si un sélecteur correspond à quelque chose dans jQuery?

Dans Mootools, je ne ferais que lancer if ($('target')) { ... }. Est-ce que if ($('#target')) { ... } dans jQuery fonctionne de la même manière?

436
One Crayon

Les autres commentateurs suggèrent que la manière la plus efficace de le faire semble être:

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

Si vous devez absolument avoir une fonction exist () - ce qui sera plus lent - vous pouvez faire:

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

Ensuite, dans votre code, vous pouvez utiliser

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

Comme répondu ici

707
Pat

non, jQuery renvoie toujours un objet JQuery, qu'un sélecteur ait été mis en correspondance ou non. Vous devez utiliser .length

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

}
85
redsquare

si vous avez utilisé:

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

vous voudriez dire que l'enchaînement était possible alors que ce n'est pas le cas.

Ce serait mieux

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

Je pense que la plupart des personnes qui ont répondu ici n'ont pas bien compris la question, sinon je pourrais me tromper.

La question est "comment vérifier si oui ou non un sélecteur existe dans jQuery".

La plupart des gens ont pris cela pour "comment vérifier si un élément existe dans le DOM en utilisant jQuery". Peu interchangeable.

jQuery vous permet de créer des sélecteurs personnalisés, mais voyez ici ce qui se passe lorsque vous essayez de l'utiliser sur e avant de l'initialiser;

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

Après avoir rencontré cela, j’ai réalisé que c’était simplement une question de vérification.

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

À votre santé.

16
skqr

Encore une autre manière:

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

Alternativement:

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

Je préfère le

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

Ce qui vérifie fondamentalement si cet élément est une sorte de "*" (tout élément). Une syntaxe plus propre et le "est" est plus logique dans un "si"

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