$(“”)和$ .find(“”)之间有什么区别?

时间:2015-06-30 10:15:49

标签: javascript jquery

我无法理解$("")$.find("")之间的区别。当没有匹配但是你尝试对结果做某事时(例如调用toggle()),它们的行为会有所不同。

$("").toggle(); // No error

$.find("").toggle(); // An error

$("body").find("").toggle(); // No error!

$($.find("")).toggle(); // No error

为什么呢? : - )

在我的上下文中,我有一个使用$来全局搜索元素的函数,当没有匹配时没有问题。现在我想允许函数只搜索指定的元素(包装在jQuery对象中)。但是如果我自己通过$,它仍然可以工作。

4 个答案:

答案 0 :(得分:6)

$.find("")返回一个空数组,因此在使用[].toggle()时会因为数组没有切换方法而抛出错误。

将其包装在jQuery中,即$ like $($.find(""))返回一个空对象Object[],并在jQuery对象中使用toggle()不会抛出错误。

  

$ .find是内部CSS选择器引擎(Sizzle),该函数只返回已找到元素的数组。它不是jQuery实例,因此没有像切换这样的jQuery原型方法。 (谢谢@dfsq)

jquery中没有$.find的简写方法 find

答案 1 :(得分:1)

这是官方jQuery文档关于.find方法的说法:

  

获取当前匹配组中每个元素的后代   元素,由选择器,jQuery对象或元素过滤。

$ .find("")和$("")之间的区别.find("")是: $ .find开始从DOM树的最顶层遍历DOM,而$("")。find从指定的DOM元素开始遍历DOM并尝试找到它的子元素。

答案 2 :(得分:1)

实际上,toggle是一个jQuery函数,只能在jQuery对象中使用但是$.find()不返回jQuery对象而是返回vanilla JavaScript对象。因此错误。

然而,任何jQuery选择器都将返回一个jQuery对象,因此,如果将此$.find转换为jQuery对象,则它可以正常工作。

您可以尝试以下代码来检查对象是否是jQuery对象。

$("#mainbar") instanceof jQuery
//Output: true

$.find("#mainbar") instanceof jQuery
//Output: false

$($.find("#mainbar")) instanceof jQuery
//Output: true

答案 3 :(得分:0)

请参阅官方jQuery文档,其中说明:

  

给定一个表示一组DOM元素的jQuery对象,.find()方法允许我们搜索这些元素的后代(...)

换句话说,.find()只有在想要在已选定元素中找到的内容时才能正常工作。