Comment vérifier si un sélecteur correspond à quelque chose dans jQuery? [dupliquer]
-
08-07-2019 - |
Question
Cette question a déjà une réponse ici:
Dans Mootools, je venais de lancer si ($ ('cible')) {...}
. Est-ce que if ($ ('# target')) {...}
dans jQuery fonctionne de la même manière?
La solution
Comme d'autres intervenants le suggèrent, la méthode la plus efficace semble être la suivante:
if ($(selector).length ) {
// Do something
}
Si vous devez absolument disposer d'une fonction exist (), ce qui sera plus lent, vous pouvez le faire:
jQuery.fn.exists = function(){return this.length>0;}
Ensuite, dans votre code, vous pouvez utiliser
if ($(selector).exists()) {
// Do something
}
Selon la réponse ici
Autres conseils
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 est possible quand 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 de savoir comment vérifier si un sélecteur existe ou non dans jQuery. "
La plupart des gens ont utilisé ceci pour "comment vérifier si un élément existe dans le DOM à l'aide de 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é ce problème, 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.
}
A bientôt.
Encore une autre façon:
$('#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("*")){...}
Qui vérifie si cet élément est en quelque sorte un " * " (tout élément). Juste une syntaxe plus propre et le " is " est plus logique à l'intérieur d'un "si" et
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) {}
commencez par créer une fonction:
$.fn.is_exists = function(){ return document.getElementById(selector) }
puis
if($(selector).is_exists()){ ... }