2011-01-24 73 views
10

有沒有區別:$(document)$("document")

編輯:當進入.ready()例如$("document").ready()

回答

19

$(document)使用jQuery來包裝全局document對象。

$("document")嘗試尋找一個<document>元件,這顯然是沒有意義的HTML,因爲沒有這樣的元素,僅在由<html>元件的標記表示的根document對象。它的行爲方式是因爲通過傳遞jQuery函數一個字符串,你實際上給它一個selector

重新編輯:作爲patrick dw說,在ready()情況下沒有區別,實際上在jQuery 3.0的使用$(document)所有或顯式調用ready()已被棄用。從documentation

jQuery提供了幾種方法來附加一個函數,該函數將在DOM準備就緒時運行。以下所有的語法是等效的:

  • $(handler)
  • $(document).ready(handler)
  • $("document").ready(handler)
  • $("img").ready(handler)
  • $().ready(handler)

在jQuery 3.0,僅建議所述第一語法;其他語法仍然有效,但不推薦使用。這是因爲選擇與.ready()方法的行爲沒有關係,這是低效的並且可能導致對方法行爲的錯誤假設。例如,第三種語法與"document"一起工作,它不選擇任何東西。第四種語法等待文檔準備就緒,但意味着(不正確)它等待圖像準備就緒。

+2

非常好的答案是什麼*實際*問題。 +1 – user113716 2011-01-24 19:19:39

+0

那麼$(「html」)和$(document)之間有什麼區別呢? – Andrew 2017-03-14 19:09:43

0

documentdocument是一個預製的全局變量,它是當前HTML文檔的表示形式,簡寫爲window.document

$("document"),正如@BoltClock指出的那樣,將使用該字符串作爲<document>元素的選擇器。

1

你的第一個例子將在你的JS中搜索一個名爲document的變量或對象。 (請小心,它是一個預定義變量)

第二個將在頁面中搜索名稱爲「document」的標籤。

var document = 'div#logo'; 
$(document); //will search for div#logo 
$('document'); //will search for document 
7

如果你談論調用.ready()功能,它(目前)沒有什麼區別。

在這兩種情況下,參數都被忽略。

你可以這樣做:

$("cheese pizza").ready(function() {}); 

要清楚,最好是使用.ready()正式支持的電話,它們是:

$(document).ready(function(){/*...*/}); 

和:

$(function(){/*...*/}); 

當act如果選擇document,則應使用$(document)