¿Cómo verifica si un selector coincide con algo en jQuery? [duplicar]
-
08-07-2019 - |
Pregunta
Esta pregunta ya tiene una respuesta aquí:
En Mootools, simplemente ejecutaba if ($ ('target')) {...}
. ¿ if ($ ('# target')) {...}
en jQuery funciona de la misma manera?
Solución
Como los otros comentaristas sugieren que la forma más eficiente de hacerlo parece ser:
if ($(selector).length ) {
// Do something
}
Si absolutamente debe tener una función exist (), que será más lenta, puede hacer:
jQuery.fn.exists = function(){return this.length>0;}
Luego, en su código puede usar
if ($(selector).exists()) {
// Do something
}
Como se respondió aquí
Otros consejos
no, jquery siempre devuelve un objeto jquery independientemente de si un selector coincide o no. Necesitas usar .length
if ( $('#someDiv').length ){
}
si usaste:
jQuery.fn.exists = function(){return ($(this).length > 0);}
if ($(selector).exists()) { }
implicaría que el encadenamiento era posible cuando no lo es.
Esto sería mejor
jQuery.exists = function(selector) {return ($(selector).length > 0);}
if ($.exists(selector)) { }
Creo que la mayoría de las personas que respondieron aquí no entendieron la pregunta, o podría estar equivocado.
La pregunta es cómo comprobar si existe o no un selector en jQuery. "
La mayoría de las personas han tomado esto para " cómo verificar si un elemento existe en el DOM usando jQuery. " Difícilmente intercambiable.
jQuery le permite crear selectores personalizados, pero vea aquí qué sucede cuando intenta usar en e antes de inicializarlo;
$(':YEAH');
"Syntax error, unrecognized expression: YEAH"
Después de toparme con esto, me di cuenta de que era simplemente cuestión de verificar
if ($.expr[':']['YEAH']) {
// Query for your :YEAH selector with ease of mind.
}
Saludos.
Otra forma más:
$('#elem').each(function(){
// do stuff
});
if ($('#elem')[0]) {
// do stuff
}
Alternativamente:
if( jQuery('#elem').get(0) ) {}
Prefiero el
if (jQuery("#anyElement").is("*")){...}
Que básicamente comprueba si este elemento es una especie de " * " (cualquier elemento) Solo una sintaxis más limpia y el " es " tiene más sentido dentro de un " if "
jQuery.fn.exists = function(selector, callback) {
var $this = $(this);
$this.each(function() {
callback.call(this, ($(this).find(selector).length > 0));
});
};
Para mí .exists
no funciona, así que uso el índice:
if ($("#elem").index() ! = -1) {}
primero crea una función:
$.fn.is_exists = function(){ return document.getElementById(selector) }
luego
if($(selector).is_exists()){ ... }