2011-09-02 10 views
10

Soy nuevo en jQuery y me gustaría simplificar el manejo de los elementos que no puede encontrar, que es un problema bastante común. El código siguiente muestra lo que quiero decir:¿Es posible que jQuery arroje una excepción cuando no se encuentra un elemento?

var category = $('select#Category'); 

Ahora, puedo inspeccionar la variable vuelto a ver si no se ha encontrado, pero definitivamente prefiero una excepción que es lanzado de forma automática en este caso. ¿Es esto posible con jQuery? Si no es así, ¿existe alguna expresión común para implementar dicha verificación automática de errores sobre jQuery?

Respuesta

12

No estoy seguro de cualquier funcionalidad existente para hacer eso, pero creo que esto debería funcionar para usted si lo pones en la parte superior de la página antes de usar jQuery, pero después de cargarlo:

(function(){ 
    var _$ = $; 
    $ = function(){ 
     var $res = _$.apply(0, arguments); 
     if(!$res.length && typeof arguments[0] === 'string') 
      throw 'No element Found: ' + arguments[0]; 
     return $res; 
    } 
    $ = _$.extend(true, $, _$); 
})(); 

JSFiddle Example

+0

Mejora: cambie la línea de tiro para 'arrojar' No se encontró ningún elemento: '+ argumentos [0]; 'y puede ver qué selector causó el error. – Jamiec

+0

@Jamiec Gracias, eso es una buena adición :) – Paulpro

+0

En realidad, ahora veo un problema real con esta solución. Después de reemplazar $ con esta función, debo acceder a la API jQuery como _ $. Por ejemplo: _ formato $. ¿Qué tal si cambiamos la solución para exponer el contenedor de lanzamiento de excepción como _ $ en su lugar? Si no puedo ajustar $ completamente, preferiría simplemente llamar _ $() para buscar variables indefinidas. – aknuds1

2

simplemente utilizo este enfoque:

if (category.length == 1) { 
// node has been found (and is the only one in the dom) 
} 

creo que lanzar una excepción no es una buena idea: P

+0

Quizás tenga razón en general sobre las excepciones en JavaScript, pero odio tener que verificar explícitamente cada variable. Es como en C, donde definiría macros para manejar el error que indica los valores de retorno automáticamente. – aknuds1

+0

@ aknuds1 daveoncode es correcto. Las excepciones no detectadas son errores en Javascript y hacen que se detenga la ejecución. Por lo tanto, necesitaría tener bloques 'try catch' en todas partes si usaba excepciones. Actualicé mi ejemplo de JSFIddle para mostrar cómo nunca se llega a una línea de código después de una excepción no detectada: http://jsfiddle.net/Paulpro/P87Cp/ – Paulpro

+0

@PaulPRO Sin embargo, esto no es diferente de otros lenguajes. El beneficio es que puedo manejar todas las variables indefinidas dentro de una función en un lugar (el bloque catch). – aknuds1

Cuestiones relacionadas