¿Existe una función "existe" para jQuery?

Resuelto Jake McGraw asked hace 16 años • 17 respuestas

¿Cómo puedo comprobar la existencia de un elemento en jQuery?

El código actual que tengo es este:

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

¿Existe una forma más elegante de abordar esto? ¿Quizás un complemento o una función?

Jake McGraw avatar Aug 28 '08 02:08 Jake McGraw
Aceptado

En JavaScript, todo es "verdadero" o "falso", y en el caso de los números 0significa falsetodo lo demás true. Entonces podrías escribir:

if ($(selector).length)

No necesitas esa >0parte.

Tim Büthe avatar Feb 25 '2009 19:02 Tim Büthe

¡Sí!

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

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

Esto es en respuesta a: Podcast de Herding Code con Jeff Atwood

Jake McGraw avatar Aug 27 '2008 19:08 Jake McGraw

si usaste

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

daría a entender que el encadenamiento era posible cuando no lo es.

Esto sería mejor:

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

Alternativamente, desde las preguntas frecuentes :

if ( $('#myDiv').length ) { /* Do something */ }

También puedes usar lo siguiente. Si no hay valores en la matriz de objetos jQuery, obtener el primer elemento de la matriz devolvería un valor indefinido.

if ( $('#myDiv')[0] ) { /* Do something */ }
Jon Erickson avatar Jan 14 '2009 19:01 Jon Erickson

La forma más rápida y semánticamente autoexplicativa de comprobar la existencia es mediante el uso de JavaScript simple:

if (document.getElementById('element_id')) {
    // Do something
}

Es un poco más largo de escribir que la alternativa de longitud de jQuery, pero se ejecuta más rápido ya que es un método JS nativo.

Y es mejor que la alternativa de escribir su propia función jQuery. Esa alternativa es más lenta, por las razones que afirmó @snover. Pero también daría a otros programadores la impresión de que la función existe() es algo inherente a jQuery. JavaScript sería/debería ser entendido por otras personas que editen su código, sin aumentar la deuda de conocimientos.

NB: Observe la falta de un '#' antes de element_id (ya que es JS simple, no jQuery).

Magne avatar Jan 11 '2012 12:01 Magne

Puedes ahorrar algunos bytes escribiendo:

if ($(selector)[0]) { ... }

Esto funciona porque cada objeto jQuery también se hace pasar por una matriz, por lo que podemos usar el operador de desreferenciación de matriz para obtener el primer elemento de la matriz . Devuelve undefinedsi no hay ningún elemento en el índice especificado.

Salman A avatar Jan 18 '2014 09:01 Salman A

Puedes usar:

if ($(selector).is('*')) {
  // Do something
}

Un poco más elegante, tal vez.

Devon avatar Sep 17 '2008 17:09 Devon