2013-06-03 43 views
1

我想知道什么存储一个JQuery选择到变量中。我尝试了下面的例子。存储JQuery变量可能吗?

var images = $('div').find('img'); 
alert($(images[0]).attr('src')); 

This Works。但是,如果我使用图像[0]而不是$(图像[0]),则代码将不起作用。我得出的结论是,上面的代码已经创建了一个包含div img元素的DOM元素的数组。我错过了什么?

谢谢

+0

查找jQuery每个 – Neil

回答

8

甲jQuery对象是一个阵列状对象。你可以访问它一个数组(它有数字属性),它有一个.length属性,但它不是一个数组(它不会从Array.prototype继承)。

当您访问像那样的jQuery对象,即images[0]时,您将返回一个选定的DOM元素。毕竟,一个jQuery对象只是DOM元素的集合。

在这种情况下,虽然,你可以简单地做

alert(images.attr('src')); 

因为images是一个jQuery对象。

不返回jQuery对象的方法通常与第一个选定元素一起工作,因此相当于$(images[0]).attr(...)images.eq(0).attr(...)

也许你认为method chaining [Wikipedia](即a.b().c())是“神奇的”,但事实并非如此。每个方法都会返回一个对象,而不是将返回值保存在变量中,而是立即调用另一个函数。


只是为了总结:所有的选择方法返回jQuery的对象。这些对象是类似数组的对象。您可以随意将它们存储在变量中。

的下面的例子全部是等价的:

// 1 
$('div').find('img').attr('src'); 

// 2 
var divs = $('div'); 
divs.find('img').attr('src'); 

// 3 
var images = $('div').find('img'); 
images.attr('src'); 

// 4 
var divs = $('div'); 
var images = divs.find('img'); 
images.attr('src'); 
+1

值得注意的是,一个通用的命名约定可能是调用变量'$ images'来表明它已经是一个jQuery对象。 – stevelove

1

每当你使用jQuery找对象,总是返回数组。如果找不到元素,则返回一个空数组。数组中的每个元素表示HTML页面中的原始DOM对象。

只能在jQuery数组上调用jQuery事件,而不能直接调用元素。 DOM元素是HTML对象类型,不包含jQuery函数。要调用一个jQuery的功能就像一个DOM元素上ATTR,你必须通过调用$(对象),将其转换为一个jQuery对象

希望这有助于

1

首先:你不需要这样做。相反,只需要images.attr("src"),它几乎与$(images[0]).attr('src')(甚至更快)相同。其次,jQuery存储了一个类似于数组的对象中存在的元素的集合,这就是为什么它不起作用。
当您使用images[0]时,您直接处理DOM对象,而不是jQuery,有时可能会造成更多痛苦。

相关问题