2013-01-08 109 views
1

我開始學習jQuery和我想知道爲什麼jQuery方法不能適用應用上的DOM元素jQuery方法

在這個例子中

:而這一個工程

$('p')[0].html('salut !'); //for this instruction i got this error : 
          //"TypeError: $(...)[0].html is not a function " 

$('body')[0].tagName.toLowerCase(); 

我很困惑,我想知道這兩種情況有什麼區別。

這裏是同樣的問題,另外一個例子:

var listItems = $('li'); 
var rawListItem = listItems[0]; // or listItems.get(0) 
var html = rawListItem.html(); 
// Object #<HTMLInputElement> has no method 'html' 

這裏是如何使用.EQ()使用jQuery方法的方式:

var listItems = $('li'); 
var secondListItem = listItems.eq(1); 
secondListItem.remove(); 

感謝提供一些解釋爲了這。

回答

3

jQuery對象與DOMElement完全不同。

  • jQuery對象讓你對它們執行jQuery操作。 html(),val(),eq()
  • DOMElement的......不。因爲它們是DOMElement,而不是jQuery對象。

如果你檢查documentation for .get(),你會看到你得到DOMElement回來,而不是一個jQuery對象。 [0]等也是如此。

eq()但是,返回一個jQuery對象,它允許您對它們執行jQuery操作。

tagNameDOMElement屬性,這就是爲什麼可以通過get()返回DOMElement s以後進行,但不能在jQuery的執行對象是由eq()返回。當在get()eq()上使用時,相反適用於html()

當然,您可以通過$()將任何DOMElement包裝到jQuery對象中,這會讓您對其執行jQuery操作;

$($('p')[0]).html('salut !'); 

但在你的情況,你應該用eq()

$('p').eq(0).html('salut !'); 
2

它接縫,你通過實踐學習,女巫是個好東西,所以這裏的一些指針:

  • jQuery使用對象,當您將它們包裝到$(...)中時,當您使用數組指針時,您將收到一個對象
  • ,如$('p')[0]你總是會得到本地陣列輸出,巫婆就是一個字符串,爲此,不是一個對象

,以便檢索的第一個元素作爲一個對象,你有3選擇

var jQueryObj = $('p:first'); // using :first 

var jQueryObj = $("p").eq(0); // using eq() 

var jQueryObj = $($('p')[0]); // wrap it in a jQuery call 

並牢記,在console永遠是你最好的朋友測試JavaScript的

enter image description here

+0

謝謝你爲你的答案馬特和balexandre時。這導致我陷入困惑的根源,這是因爲$()在使用數組符號指針「[0]」或「get」時使用.eq()和DOMElement返回一個jQuery對象()「,這讓我想知道$()本身的性質/結構。 – Bardelman

+0

好吧,我在這裏得到了答案http://api.jquery.com/Types/#jQuery:jQuery實際上是一個集合文檔對象模型(DOM)元素。 eq()方法簡單地將匹配元素的集合減少到指定索引處的元素。 aLL現在太棒了:) – Bardelman

+0

'eq()'與調用數組的索引相同,但它會返回一個對象而不是字符串 – balexandre