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

cette question a déjà une réponse ici:

  • y a-t-il une fonction" existe " pour jQuery? 39 réponses

à Mootools, je courrais if ($('target')) { ... } . Est-ce que if ($('#target')) { ... } en jQuery fonctionne de la même façon?

412
demandé sur BoltClock 2008-11-18 22:13:31

11 réponses

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

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

si vous devez absolument avoir une fonction exists () - qui sera plus lente - vous pouvez faire:

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

puis dans votre code vous pouvez utiliser

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

Comme réponse ici

674
répondu Pat 2017-05-23 12:10:31

Non, jquery renvoie toujours un objet jquery indépendamment du fait qu'un sélecteur ait été apparié ou non. Vous avez besoin d'utiliser .longueur

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

}
80
répondu redsquare 2008-11-18 19:17:09

si vous avez utilisé:

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

vous sous-entendez que l'enchaînement était possible alors qu'il ne l'est pas.

ce serait mieux

jQuery.exists = function(selector) {return ($(selector).length > 0);}
if ($.exists(selector)) { }
19
répondu Jon Erickson 2009-01-14 19:43:58

je pense que la plupart des gens qui ont répondu ici n'ont pas tout à fait 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."À peine interchangeables.

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

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

après avoir couru dans ce, j'ai réalisé qu'il était simplement une question de vérifier

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

santé.

15
répondu skqr 2012-03-18 16:33:48

encore une autre voie:

$('#elem').each(function(){
  // do stuff
});
14
répondu PhilT 2010-10-22 07:53:37
if ($('#elem')[0]) {
  // do stuff
}
13
répondu Sean Curtis 2012-08-30 14:21:01

alternativement:

if( jQuery('#elem').get(0) ) {}
3
répondu James 2008-11-19 09:40:06

je préfère le

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

qui vérifie essentiellement si ces éléments sont une sorte de " * " (n'importe quel élément). Juste une syntaxe plus propre et le "est" a plus de sens à l'intérieur d'un "si"

1
répondu user1134422 2012-08-11 19:50:19
jQuery.fn.exists = function(selector, callback) {
    var $this = $(this);
    $this.each(function() {
        callback.call(this, ($(this).find(selector).length > 0));
    });
};
1
répondu logrox 2014-01-24 12:17:30

Pour moi .exists ne fonctionne pas, donc j'utilise l'index :

if ($("#elem").index() ! = -1) {}
-3
répondu Maurice Montreuil 2012-02-02 12:09:42

tout d'abord créer une fonction:

$.fn.is_exists = function(){ return document.getElementById(selector) }

puis

if($(selector).is_exists()){ ... }
-6
répondu Takács Zsolt 2013-09-30 08:47:38