检测jquery选择器是否返回空对象的最佳方法是什么? 如果你有:

alert($('#notAnElement'));

你得到[object object],所以我现在做的方式是:

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

它会写"undefined"你可以检查一下。但这似乎很糟糕。还有别的办法吗?


当前回答

我喜欢使用presence,灵感来自Ruby on Rails:

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

你的例子是:

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

我发现它优于提议的$.fn。存在,因为您仍然可以使用布尔运算符或if,但真值结果更有用。另一个例子:

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

其他回答

我最喜欢的是用这个小小的便利来扩展jQuery:

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

使用:

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

比使用长度更明确。

我喜欢这样做:

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

然后你可以这样做:

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/

这是在JQuery文档中:

http://learn.jquery.com/using-jquery-core/faq/how-do-i-test-whether-an-element-exists/

  alert( $( "#notAnElement" ).length ? 'Not null' : 'Null' );

我喜欢使用presence,灵感来自Ruby on Rails:

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

你的例子是:

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

我发现它优于提议的$.fn。存在,因为您仍然可以使用布尔运算符或if,但真值结果更有用。另一个例子:

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

我的偏好,我不知道为什么这还没有在jQuery:

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

这样用:

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

或者,如CoffeeScript中所示:

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