Quel est le meilleur moyen de détecter si un sélecteur jQuery renvoie un objet vide. Si tu fais:
alert($('#notAnElement'));
vous obtenez [objet Objet], donc je le fais maintenant comme suit:
alert($('#notAnElement').get(0));
qui écrira "indéfini", et vous pourrez donc vérifier cela. Mais cela semble très mauvais. Quel autre moyen y a-t-il?
Mon préféré est d’étendre jQuery avec cette petite commodité:
$.fn.exists = function () {
return this.length !== 0;
}
Utilisé comme:
$("#notAnElement").exists();
Plus explicite que d'utiliser la longueur.
if ( $("#anid").length ) {
alert("element(s) found")
}
else {
alert("nothing found")
}
Le sélecteur renvoie un tableau d'objets jQuery. Si aucun élément correspondant n'est trouvé, un tableau vide est renvoyé. Vous pouvez vérifier le .length
de la collection renvoyée par le sélecteur ou vérifier si le premier élément du tableau est 'non défini'.
Vous pouvez utiliser any les exemples suivants dans une instruction IF et ils produisent tous le même résultat. True, si le sélecteur a trouvé un élément correspondant, false sinon.
$('#notAnElement').length > 0
$('#notAnElement').get(0) !== undefined
$('#notAnElement')[0] !== undefined
J'aime faire quelque chose comme ça:
$.fn.exists = function(){
return this.length > 0 ? this : false;
}
Alors vous pouvez faire quelque chose comme ça:
var firstExistingElement =
$('#iDontExist').exists() || //<-returns false;
$('#iExist').exists() || //<-gets assigned to the variable
$('#iExistAsWell').exists(); //<-never runs
firstExistingElement.doSomething(); //<-executes on #iExist
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 au _$.fn.exists
_ proposé parce que vous pouvez toujours utiliser des opérateurs booléens ou if
, mais le résultat de la vérité est plus utile. Un autre exemple:
_$ul = $elem.find('ul').presence() || $('<ul class="foo">').appendTo($elem)
$ul.append('...')
_
Ma préférence, et je ne sais pas pourquoi cela n’est pas déjà dans jQuery:
$.fn.orElse = function(elseFunction) {
if (!this.length) {
elseFunction();
}
};
Utilisé comme ceci:
$('#notAnElement').each(function () {
alert("Wrong, it is an element")
}).orElse(function() {
alert("Yup, it's not an element")
});
Ou, comme il se présente dans CoffeeScript:
$('#notAnElement').each ->
alert "Wrong, it is an element"; return
.orElse ->
alert "Yup, it's not an element"
C’est dans la documentation de JQuery:
http://learn.jquery.com/using-jquery-core/faq/how-do-i-test-whether-an-element-exists/
alert( $( "#notAnElement" ).length ? 'Not null' : 'Null' );