284 votes

Comment puis-je détecter si un sélecteur retourne null?

Quelle est la meilleure façon de détecter si un jQuery-sélecteur retourne un objet vide. Si vous ne:

alert($('#notAnElement'));

vous obtenez [object object], de sorte que la façon dont je le fais maintenant c'est:

alert($('#notAnElement').get(0));

qui va écrire "undefined", et donc vous pouvez faire une vérification de pour que. Mais il semble très mauvais. Quelle autre voie est-il?

508voto

Magnar Points 15142

Mon préféré est l'extension de jQuery avec ce petit commodité:

$.fn.exists = function () {
    return this.length !== 0;
}

Utilisé comme:

$("#notAnElement").exists();

Plus explicite qu'à l'aide de la longueur.

201voto

duckyflip Points 6895
if( $("#anid").length ){
  alert("element(s) found")
}else{
  alert("nothing found")  
}

73voto

Jose Basilio Points 29215

Le sélecteur retourne un tableau d'objets jQuery. Si aucune correspondance n'éléments sont trouvés, il renvoie un tableau vide. Vous pouvez vérifier la longueur ou la taille() du tableau retourné par le sélecteur ou de vérifier si le premier élément du tableau est "indéfini".

Vous pouvez utiliser tout les exemples suivants à l'intérieur d'une instruction if et ils produisent tous le même résultat. Vrai, si le sélecteur trouvé un élément correspondant, false sinon.

$('#notAnElement').length > 0
$('#notAnElement').size() > 0
$('#notAnElement').get(0) !== undefined
$('#notAnElement')[0] !== undefined

39voto

CSharp Points 161

Je voudrais faire quelque chose comme ceci:

$.fn.exists = function(){
    return this.length > 0 ? this : false;
}

Alors vous pouvez faire quelque chose comme ceci:

var firstExistingElement = 
    $('#iDontExist').exists() ||      //<-returns false;
    $('#iExist').exists() ||          //<-gets assigned to the variable 
    $('#iExistAsWell').exists();      //<-never runs

firstExistingElement.doSomething();   //<-executes on #iExist

http://jsfiddle.net/vhbSG/

9voto

J'aime utiliser presence, inspiré de Ruby on Rails:

$.fn.presence = function () {
    return this.length !== 0 && this;
}

Votre exemple devient:

alert($('#notAnElement').presence() || "No object found");

Je le trouve supérieur à la proposition d' $.fn.exists parce que vous pouvez toujours utiliser les opérateurs booléens ou if, mais le truthy résultat est plus utile. Un autre exemple:

$ul = $elem.find('ul').presence() || $('<ul class="foo">').appendTo($elem)
$ul.append('...')

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X