Why does $('selector').find not return the same object as $.find('selector')?

时间:2015-06-30 13:56:40

标签: jquery

When I execute the following statements, why do I not get the same object? console.log($('body').find('#myFormId'))

and

console.log($.find('#myFormId'))

Please see my HTML below:

<body>
<form id="myFormId"></form>
</body>

I can see that the first statement returns a jQuery object, where as the second statement only returns a array with the DOM element in it.

Debugging the jQuery code I can see that the context argument in the Sizzle function is undefiend when executing the second statement, please see below: enter image description here

2 个答案:

答案 0 :(得分:2)

  

为什么$('selector')。找不到与$ .find('selector')相同的对象?

相同DOM元素的jQuery对象无论如何都不是同一个对象。

$('body').find('#myFormId') === $('body').find('#myFormId')       // false

但是,底层DOM对象将是相同的。

$('body').find('#myFormId')[0] === $('body').find('#myFormId')[0] // true
$('body').find('#myFormId')[0] === $.find('#myFormId')[0]         // true

要测试相等性,可以使用is()

$('body').find('#myFormId').is( $('body').find('#myFormId') )     // true
$('body').find('#myFormId').is( $.find('#myFormId') )             // true

演示:JSBin

注意:使用$.find()似乎是无证件行为。

答案 1 :(得分:0)

.find()

应该在表示一组DOM元素的jQuery对象上调用,就像在$('body').find('#myFormId')中一样,而直接使用

 $.find()

不在documented API中。所以你不应该期待任何特定的行为,以及我们现在正在观察的东西(返回一个数组)以及未来的改变