2015-06-30 149 views
0

當我執行以下語句時,爲什麼我不能獲得相同的對象? console.log($('body').find('#myFormId'))

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

請參考下面我的HTML:

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

我可以看到,第一條語句返回一個jQuery對象,其中的第二條語句只返回一個數組與它的DOM元素。

調試jQuery代碼我可以看到,在執行第二條語句時context論點滋滋聲功能undefiend,請參閱以下內容: enter image description here

回答

1

爲什麼$(「選擇」)發現不是。返回與$ .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()似乎是無證的行爲。

+0

我同意,它們是相同的DOM元素,但爲什麼'$ .find(' ('body')。find('#myFormId')like'$('body')。find('#myFormId')。css' –

+0

我搜索了APIs,儘管'.find()似乎可行,但它缺少上下文和選擇器。你可能偶然發現了一些不應該實際工作的東西。 ;) – Drakes

+0

好的,我認爲應該在特定環境中使用的函數應該自我驗證,或至少提醒您。 –

0
.find() 

應該叫代表了一組DOM元素,就像你在做$('body').find('#myFormId')一個jQuery對象,而直接用

$.find() 

不在documented API。所以你不應該期待任何特定的行爲,並且我們現在正在觀察的是(返回一個數組)mat替換int未來

相關問題