我很难绕着jQuery eq缠绕我的脑袋。有人可以向我解释它的用途吗?它是什么以及如何索引?
感谢。
答案 0 :(得分:11)
使用此HTML:
<ul>
<li>Mario</li>
<li>Luigi</li>
<li>Princess</li>
<li>Toad</li>
</ul>
这个JavaScript:
alert($("ul li").eq(0).text()); // Mario
alert($("ul li").eq(1).text()); // Luigi
alert($("ul li").eq(2).text()); // Princess
alert($("ul li").eq(3).text()); // Toad
答案 1 :(得分:9)
.eq(i)
返回指定索引i
的集合中的元素。
在您发布的链接的示例中:
$("p").eq(1).css("color", "red")
它基本上说:“查找匹配$(”p“)的所有元素,然后取第二个并将其颜色更改为红色。”
$("p")
匹配文档中的所有<p>
元素。你现在有了这些的集合。
$("p").eq(1)
仅将此集合缩减为第二个元素。
.css("color", "red")
部分只对该元素进行操作,将其颜色更改为红色。
答案 2 :(得分:4)
要了解eq()
的工作原理,我认为了解$()
在jQuery中的工作原理会有所帮助。指定时
$([selector],[context])
//which is the same as
$([context]).find([selector])
返回的是 jQuery 对象(有时称为包装集),除其他属性外,还有一个属性启动使用0
并为与选择器匹配的每个元素递增1。还设置了length
属性,这就是为什么jQuery对象的匹配元素可以像数组一样迭代(使用for循环或诸如each([callback])
之类的命令)。
现在让我们来看看eq()
eq: function( i ) {
return this.slice( i, +i + 1 );
},
我们看到eq()
是使用jQuery对象的slice()
命令实现的,所以让我们看一下
slice: function() {
return this.pushStack( Array.prototype.slice.apply( this, arguments ),
"slice", Array.prototype.slice.call(arguments).join(",") );
},
还需要查看pushStack()
,一个内部使用的命令
// Take an array of elements and push it onto the stack
// (returning the new matched element set)
pushStack: function( elems, name, selector ) {
// Build a new jQuery matched element set
var ret = jQuery( elems );
// Add the old object onto the stack (as a reference)
ret.prevObject = this;
ret.context = this.context;
if ( name === "find" )
ret.selector = this.selector + (this.selector ? " " : "") + selector;
else if ( name )
ret.selector = this.selector + "." + name + "(" + selector + ")";
// Return the newly-formed element set
return ret;
},
我们可以看到pushStack
接受一个数组并返回一个新的jQuery对象。构成新jQuery对象的匹配元素的元素是通过调用JavaScript Array Function.apply
函数上的slice
并将arguments
作为{{1}传递给jQuery slice函数获得的。 }}
另一方面,get()
命令更直接。我们来看看源代码
argsArray
在没有 // Get the Nth element in the matched element set OR
// Get the whole matched element set as a clean array
get: function( num ) {
return num === undefined ?
// Return a 'clean' array
Array.prototype.slice.call( this ) :
// Return just the object
this[ num ];
}
参数参数的情况下调用,jQuery对象在JavaScript Array Function.call
函数上使用slice
转换为数组。如果定义了num
,则返回jQuery对象的相应属性中保存的值,与以下内容大致相同
num
答案 3 :(得分:1)
查看docs中的示例:
$("p").eq(1).css("color", "red")
$("p") selects all paragraphs in your document
.eq(1) selects the second element only
.css("color", "red") applies css rule to the selected element
答案 4 :(得分:0)
听起来你可能会被“索引”这个词所吸引。
在这种情况下,'index'指的是项目集合中的特定项目。因此, eq 将允许您访问匹配的元素集中的单个项目。