定义jQuery“eq”

时间:2009-09-15 17:06:11

标签: jquery

我很难绕着jQuery eq缠绕我的脑袋。有人可以向我解释它的用途吗?它是什么以及如何索引?

感谢。

5 个答案:

答案 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 将允许您访问匹配的元素集中的单个项目。