2013-01-08 53 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