jquery给出TypeError从包装集中获取元素

时间:2014-03-07 23:38:36

标签: javascript jquery html css

我是一名新手,在练习中使用alt属性获取所有img元素集合中的第一个元素。在jQuery in Action第1版的第35页,我在“Wrapped Set Lab”中输入以下命令:

$("img[alt]").get(0)

或者这个:

$("img[alt]")[0]

这两个命令都在控制台中提供了这个异常:

错误:TypeError Object#没有方法'addClass'

这是标记片段:

<div>
  <img src="images/image.1.jpg" id="hibiscus" alt="Hibiscus"/>
  <img src="images/image.2.jpg" id="littleBear" title="A dog named Little Bear"/>
  <img src="images/image.3.jpg" id="verbena" alt="Verbena"/>
  <img src="images/image.4.jpg" id="cozmo" title="A puppy named Cozmo"/>
  <img src="images/image.5.jpg" id="tigerLily" alt="Tiger Lily"/>
  <img src="images/image.6.jpg" id="coffeePot"/>
</div>

Yet another post in SO建议这是正常的,并写信使用以下代码:

$("img[ALT]").eq(0)

工作并返回包装集中的1个元素:     IMG#木槿

本书的勘误部分没有任何内容。 SO帖子的响应者解释道 “当您使用类似[i]的下标访问集合中的项时,您实际上是从jQuery对象中解包它,并访问原始DOM节点,该节点没有像addClass和css这样的方法。

我是jQuery的新手,并不理解这个错误,也没有相关SO帖子中的解释。

2 个答案:

答案 0 :(得分:1)

addClass是一个jQuery方法。它只能在jQuery对象上调用。当您在jQuery对象上调用[0].get(0)时,您将获取基础DOM元素。该对象不支持jQuery方法。

你应该在jQuery对象本身上调用addClass

img[alt].addClass('my-new-class');

如果您只想将一个类添加到具有alt属性的第一个图像,则可以将jQuery选择器更改为$('img[alt]:first')

答案 1 :(得分:0)

当您执行$('img')之类的操作时,您获得的是jQuery对象。此jQuery对象包含0个或更多DOM元素(在本例中为img元素)。 addClass方法是jQuery对象的方法。它为对象中包含的每个元素指定一个类。

但是当你执行$('img')[0]时,你正试图检索jQuery对象中包含的第一个DOM节点(如果有的话)。此节点不是jQuery对象,因此您无法使用它来从jQuery对象调用方法。你必须做类似

的事情
$('img').eq(0); //returns a new jQuery object with the element at position 0

$($('img')[0]);

这基本上是另一种方法(jQuery可以从选择器,另一个jQuery对象或本机DOM元素构建。