我是一名新手,在练习中使用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帖子中的解释。
答案 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元素构建。