似乎jQuery的.find()
方法总是返回true
。但这并不是很有用,因为你还要检查返回对象的长度,看看它是否真的存在。
有人对这种行为有很好的解释吗?
答案 0 :(得分:13)
它不会返回true。它返回一组空元素,如果执行==
则为true。您需要检查.length
并检查是否返回了0个元素。
答案 1 :(得分:6)
如何检查匹配的任何元素的示例:
if ( $('body').find('li').length ) {
// at least one li was found
} else {
// no li's where found
}
$()
和find()
和filter()
之类的选择器方法总是返回一个jQuery对象。这样你可以链接方法。你可以做点什么
$('body').find('li').add('<p>')
这将查找正文中的所有列表元素,并向所有人添加一个段落。如果$('body').find('li')
将返回false
因为它不包含任何li,则add()
方法会抛出错误,因为您无法执行false.add()
。
答案 2 :(得分:6)
有人对这个习惯有一个很好的解释吗?
如果.find()
返回布尔值而不是jQuery
对象,则不能将其用于链接,这是jQuery的总体目标之一。
答案 3 :(得分:3)
.find()
方法返回 jQuery对象,在某些情况下可以将其评估为true
。但实际上将其严格(===
)与true
进行比较将失败(比较将返回false
)。
这就是为什么你应该使用严格比较(===
而不是==
)和检查.length
属性时计算返回的元素(关于Array
个对象也是如此)。
这是完全合理的,因为jQuery对象对于您找到的元素只是容器。它必须有jQuery方法(你可以调用.find()
的结果),因此它不能是布尔值。
答案 4 :(得分:0)
记住
$('selector').find('subselector')
将返回与
相同的结果集$('subselector', 'selector') or $('selector subselector')
find()的一个实用程序驻留在链接
中$('div table').css('width', '100px')
.find('tr').css('background-color', 'Red');