我想知道什么存储一个JQuery选择到变量中。我尝试了下面的例子。存储JQuery变量可能吗?
var images = $('div').find('img');
alert($(images[0]).attr('src'));
This Works。但是,如果我使用图像[0]而不是$(图像[0]),则代码将不起作用。我得出的结论是,上面的代码已经创建了一个包含div img元素的DOM元素的数组。我错过了什么?
谢谢
我想知道什么存储一个JQuery选择到变量中。我尝试了下面的例子。存储JQuery变量可能吗?
var images = $('div').find('img');
alert($(images[0]).attr('src'));
This Works。但是,如果我使用图像[0]而不是$(图像[0]),则代码将不起作用。我得出的结论是,上面的代码已经创建了一个包含div img元素的DOM元素的数组。我错过了什么?
谢谢
甲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');
值得注意的是,一个通用的命名约定可能是调用变量'$ images'来表明它已经是一个jQuery对象。 – stevelove
每当你使用jQuery找对象,总是返回数组。如果找不到元素,则返回一个空数组。数组中的每个元素表示HTML页面中的原始DOM对象。
只能在jQuery数组上调用jQuery事件,而不能直接调用元素。 DOM元素是HTML对象类型,不包含jQuery函数。要调用一个jQuery的功能就像一个DOM元素上ATTR,你必须通过调用$(对象),将其转换为一个jQuery对象
希望这有助于
首先:你不需要这样做。相反,只需要images.attr("src")
,它几乎与$(images[0]).attr('src')
(甚至更快)相同。其次,jQuery存储了一个类似于数组的对象中存在的元素的集合,这就是为什么它不起作用。
当您使用images[0]
时,您直接处理DOM对象,而不是jQuery,有时可能会造成更多痛苦。
查找jQuery每个 – Neil