Dans Mootools, je ne ferais que lancer if ($('target')) { ... }
. Est-ce que if ($('#target')) { ... }
dans jQuery fonctionne de la même manière?
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
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 ){
}
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)) { }
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é.
Encore une autre manière:
$('#elem').each(function(){
// do stuff
});
if ($('#elem')[0]) {
// do stuff
}
Alternativement:
if( jQuery('#elem').get(0) ) {}
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"
jQuery.fn.exists = function(selector, callback) {
var $this = $(this);
$this.each(function() {
callback.call(this, ($(this).find(selector).length > 0));
});
};