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:
答案 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中。所以你不应该期待任何特定的行为,以及我们现在正在观察的东西(返回一个数组)以及未来的改变