"$("")" 和 "$.find("")" 有什么区别?(涉及IT技术)

4

我不太理解$("")$.find("")的区别。当没有匹配的内容但你尝试对结果进行某些操作(如调用toggle())时,它们的行为不同。

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

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

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

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

为什么?:-)

在我的背景下,我有一个使用$全局搜索元素的函数,并且没有问题,当没有匹配项时。现在我想让该函数仅在指定元素内部搜索(包装在jQuery对象中)。但是如果我传递$本身,它仍然应该工作。

4个回答

6

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

如果将其包装在 jQuery 中,即像 $($.find("")) 这样,则返回一个空对象 Object[],并且在 jQuery 对象中使用 toggle() 不会引发错误。

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

jQuery 中没有 $.find 的简写方法,但有 find 方法。


2
这是正确的答案。此外,$.find 是一个内部 CSS 选择器引擎(Sizzle),该函数仅返回找到的元素数组。它不是 jQuery 实例,因此没有 jQuery 原型方法,如 toggle - dfsq

1

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

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

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

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

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

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

1

以下是官方jQuery文档关于.find方法的说明:

获取当前匹配元素集合中每个元素的后代,可以通过选择器、jQuery对象或元素进行过滤。

$.find和$("").find之间的区别在于: $.find从DOM树的顶部开始遍历DOM,而$("").find从指定的DOM元素开始遍历DOM并尝试查找其子元素。


0

请参阅官方的jQuery文档,其中指出:

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接