[Jquery] Come posso rilevare se un selettore restituisce null?


Answers

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

Qual è il modo migliore per rilevare se un jQuery-selector restituisce un oggetto vuoto. Se fate:

alert($('#notAnElement'));

ottieni [oggetto Object], quindi il modo in cui lo faccio ora è:

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

che scriverà "indefinito", e quindi puoi fare un controllo per quello. Ma sembra molto male. Quale altro modo c'è?




Mi piace fare qualcosa del genere:

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

Quindi puoi fare qualcosa del genere:

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/




La mia preferenza, e non ho idea del perché questo non è già in jQuery:

$.fn.orElse = function(elseFunction) {
  if (!this.length) {
    elseFunction();
  }
};

Usato in questo modo:

$('#notAnElement').each(function () {
  alert("Wrong, it is an element")
}).orElse(function() {
  alert("Yup, it's not an element")
});

Oppure, come appare in CoffeeScript:

$('#notAnElement').each ->
  alert "Wrong, it is an element"; return
.orElse ->
  alert "Yup, it's not an element"