Respuestas:
Consulte las preguntas frecuentes de jQuery ...
Puede usar la propiedad de longitud de la colección jQuery que devuelve su selector:
if ( $('#myDiv').length ){}
lenght
lugar de length
; Es un error de ortografía.
.length
.
(Como parece que no tengo suficiente reputación como para rechazar la respuesta ...)
Wolf escribió:
Llamar a la propiedad de longitud en un objeto indefinido o nulo hará que los navegadores IE y webkit fallen.
En su lugar, intente esto:
// NOTE!! THE FOLLOWING IS WRONG; DO NOT USE! -- EleotleCram if($("#something") !== null){ // do something }
o
// NOTE!! THE FOLLOWING IS WRONG; DO NOT USE! -- EleotleCram if($("#something") === null){ // don't do something }
Si bien es cierto que llamar a la propiedad de longitud en un objeto indefinido o nulo hará que los navegadores fallen, el resultado de los selectores de jQuery ($ ('...')) nunca será nulo o indefinido. Por lo tanto, las sugerencias de código no tienen sentido. Usa una de las otras respuestas, tienen más sentido.
(Actualización 2012) Debido a que la gente mira el código y esta respuesta está bastante arriba en la lista: durante los últimos años, he estado usando este pequeño complemento:
jQuery.fn['any'] = function() {
return (this.length > 0);
};
Creo que $ ('div'). Any () se lee mejor que $ ('div'). Length , además de que no sufrirá tanto de errores tipográficos: $ ('div'). Ayn () dará un error de tiempo de ejecución , $ ('div'). la longitud en silencio probablemente sea siempre falsa.
__
Ediciones noviembre 2012:
1) Debido a que las personas tienden a mirar el código y no leer lo que se dice alrededor del código, agregué dos grandes notas de advertencia de lector al código citado de Wolf.
2) Agregué el código del pequeño complemento que uso para esta situación.
La función de búsqueda devuelve una matriz de elementos coincidentes. Podrías comprobar si la longitud es cero. Tenga en cuenta el cambio para buscar solo los elementos una vez y reutilizar los resultados según sea necesario.
var elem = $("#btext" + i);
if (elem.length != 0) {
elem.text("Branch " + i);
}
Además, ¿ha intentado utilizar la función de texto? Si no existe ningún elemento, no hará nada.
$("#btext" + i).text("Branch " + i);
La función jquery $ () siempre devuelve un valor no nulo: los elementos medios coinciden con su cretaria de selector. Si no se encuentra el elemento, devolverá una matriz vacía. Entonces su código se verá así:
if ($("#btext" + i).length){
//alert($("#btext" + i).text());
$("#btext" + i).text("Branch " + i);
}
En jQuery 1.4 obtienes la función $ .isEmptyObject, pero si te ves obligado a usar una versión anterior de jQ como nosotros, los desarrolladores pobres de Drupal simplemente roban usa este código:
// This is a function similar to the jQuery 1.4 $.isEmptyObject.
function isObjectEmpty(obj) {
for ( var name in obj ) {
return false;
}
return true;
}
Úselo como:
console.log(isObjectEmpty(the_object)); // Returns true or false.
No importa cuál sea su selección, la función $()
siempre devuelve un objeto jQuery para que no pueda usarse para probar. La mejor manera hasta ahora (si no la única) es utilizar la size()
función o la propiedad de longitud nativa como se explicó anteriormente.
if ( $('selector').size() ) {...}
if ( $('#whatever')[0] ) {...}
El objeto jQuery que es devuelto por todos los métodos nativos de jQuery NO es una matriz, es un objeto con muchas propiedades; uno de ellos es una propiedad de "longitud". También puede verificar el tamaño () o obtener (0) o obtener () - 'obtener (0)' funciona igual que acceder al primer elemento, es decir, $ (elem) [0]
¿Qué pasa con el uso de "indefinido"?
if (value != undefined){ // do stuff }
use $("#selector").get(0)
para verificar con nulos como ese. get devuelve el elemento dom, hasta entonces se trata de una matriz, donde necesita verificar la propiedad de longitud. Personalmente no me gusta la verificación de longitud para el manejo nulo, me confunde por alguna razón :)
Usando la propiedad de longitud puedes hacer esto.
jQuery.fn.exists = function(){return ($(this).length < 0);}
if ($(selector).exists()) {
//do somthing
}