为什么.find()总是返回true?

时间:2012-01-11 09:37:52

标签: javascript jquery html

似乎jQuery的.find()方法总是返回true。但这并不是很有用,因为你还要检查返回对象的长度,看看它是否真的存在。

有人对这种行为有很好的解释吗?

5 个答案:

答案 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)

jQuery的

.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');