我如何检测select器是否返回null?

检测jQueryselect器是否返回空对象的最佳方法是什么? 如果你这样做:

alert($('#notAnElement')); 

你得到[对象对象],所以我现在这样做的方式是:

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

这将写入“未定义”,所以你可以做一个检查。 但是这似乎很糟糕。 还有什么其他的方式?

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

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

用于:

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

比使用长度更明确。

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

select器返回一个jQuery对象数组。 如果找不到匹配的元素,则返回一个空数组。 您可以检查select器返回的集合的.length ,或者检查第一个数组元素是否“未定义”。

您可以在IF语句中使用以下任何示例,并且它们都会产生相同的结果。 如果select器find匹配元素,则返回false,否则返回false。

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

我喜欢做这样的事情:

 $.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/

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

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

你的例子变成:

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

我发现它优于build议的$.fn.exists因为你仍然可以使用布尔运算符,或者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" 

这是在JQuery文档中:

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

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