Comment vérifier si un sélecteur correspond à quelque chose dans jQuery? [dupliquer]
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
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 ){
}
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)) { }
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é.
encore une autre voie:
$('#elem').each(function(){
// do stuff
});
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"
jQuery.fn.exists = function(selector, callback) {
var $this = $(this);
$this.each(function() {
callback.call(this, ($(this).find(selector).length > 0));
});
};
Pour moi .exists
ne fonctionne pas, donc j'utilise l'index :
if ($("#elem").index() ! = -1) {}
tout d'abord créer une fonction:
$.fn.is_exists = function(){ return document.getElementById(selector) }
puis
if($(selector).is_exists()){ ... }