我如何检测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
我喜欢使用来自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' );