2011-04-22 52 views
2

可能重複:
document.getElementById vs jQuery

更多的jQuery newbieisms對敵​​人造成你的鄉親......

我有一些使用jQuery或多或少愉快的代碼。我的困惑是,有一次,我得到了一個標識符,它是頁面上div的ID。我希望$(theIdentifier)能夠接觸到這個對象,但它不會; console.log返回'undefined'。但是,document.getElementById(theIdentifier)成功 - 它返回我正在尋找的東西,並且div的進一步操作按預期工作。

這是怎麼回事?它們不應該完全相同嗎?爲什麼不是jQuery版本的工作?

顯然困惑;感謝您的任何建議!

+0

參考:http://api.jquery.com/jQuery/ – 2011-04-22 15:26:51

+0

我認爲你需要閱讀更多有關jQuery的http://jquery.com/ – 2011-04-22 15:38:09

回答

6

的參數設置爲 「$()」 必須是一個選擇

var $thing = $("#" + thingId); 

這是幾乎與調用 「的getElementById()」。不同的是,後者將只有關心「id」值(除IE外,見下文),而基於jQuery選擇器的代碼將關注嵌入式CSS元字符。因此,如果你有一個「ID」值與「。」在裏面,像這樣:

var foo = $('#thing.special'); 

那麼就會尋找與ID爲「事」類「特殊」的元素,而不是id爲「thing.special」的元素。 IE瀏覽器的事情:由於只有微軟的一些神祕開發人員才知道,IE中的「getElementById()」代碼將返回其「name」屬性與參數匹配的元素。該行爲不依賴於具有相同「id」值的元素的存在;我認爲它返回它在DOM中找到的第一個。 (我不知道IE9在這方面。)

注意 —評論提到正確的「$()」函數可採取多種不同類型的參數,產生各種效果的。當我說「必須是一個選擇器」時,我指的是使用字符串值參數。

+0

@pointy爲什麼var中的$名稱? – mcgrailm 2011-04-22 15:25:58

+0

@mcgrailm:有些人對包含jQuery對象的變量使用這種約定。 – delnan 2011-04-22 15:26:40

+0

@mcgrailm這是一個約定,可以很容易地跟蹤那些不支持jQuery對象的變量。我對這種做法有兩個頭腦,但它可以很方便。如果你真的想盡量減少多餘的jQuery調用。 – Pointy 2011-04-22 15:27:18

0

$接受一個CSS選擇器,而不是一個標識符 所以它是:

$('#' + identifier) 
1

你需要$( '#' + theIdentifier)的ID來獲得總有#開頭。

0
var el = document.getElementById('foo') 
$(el)... 

等同於:

$('#foo')... 
+0

不完全。 getElementByID返回實際的DOM對象。 $(「#foo」)返回一個包含DOM的jquery對象。爲了得到實際的DOM對象(如果你需要使用像innerHTML =等非jQuery方法來操作它),你需要使用$(「#foo」)[0]。 – l85m 2014-07-12 19:15:38

+0

@Demosophy你誤會了我寫的東西 - 我在說'$(document.getElementById('foo'))'和$('#foo')'是一樣的。考慮'el'作爲一個臨時變量,這是沒有被使用的。 – Alnitak 2014-07-12 21:57:55

+0

啊你是對的。感謝您的澄清。 – l85m 2014-07-13 05:16:10

相關問題