jQuery : eq() 与 get()

Posted

技术标签:

【中文标题】jQuery : eq() 与 get()【英文标题】:jQuery : eq() vs get() 【发布时间】:2011-06-10 05:27:54 【问题描述】:

我是 jQuery 新手,我想知道 jQuery 的 get()eq() 函数之间有什么区别。我可能会误解 get() 函数的作用,但我觉得奇怪的是,我不能在同一行的返回元素上调用返回的函数。

//Doesn't work
I.e.  $("h2").get(0).fadeIn("slow");

//Works
$("h2").eq(0).fadeIn("slow");

【问题讨论】:

difference between get() and eq() in jquery的可能重复 What is difference between get() and eq() in jquery?的可能重复 【参考方案1】:

上面的答案已经具体正确地解释了。我想在这里补充几点可能有助于get()的使用。

    如果您不将参数传递给 .get(),它将返回一个 DOM 元素的数组。

    如果你有一个使用 get() 的 DOM 对象,比如 var s = $("#id").get(0) 你可以简单地用这个$(s)

    把它变成jQuery对象

    如果您不想使用$obj.get(i),可以使用$obj[i] 作为替代方式,见下文,

    var $obj = $("#ul li");
    var obj1 = $obj.get(1);
    var obj2 = $obj[1];
    
    //true
    return obj2===obj1;
    

【讨论】:

【参考方案2】:

.get().eq() 都从 jQuery 对象数组返回单个“元素”,但它们以不同的形式返回单个元素。

.eq() 将其作为 jQuery 对象返回,这意味着 DOM 元素被包装在 jQuery 包装器中,这意味着它接受 jQuery 函数。

.get() 返回原始 DOM 元素的数组。您可以通过访问其属性并调用其函数来操作它们中的每一个,就像在原始 DOM 元素上一样。但它失去了作为 jQuery 包装对象的身份,因此像 .fadeIn 这样的 jQuery 函数将无法工作。

【讨论】:

.get() 返回一个数组,.get(index) 返回数组中索引处的单个元素。【参考方案3】:

jQuery eq() 方法选择具有特定索引号的 html 元素。

这是一个例子

<body>
  <div></div>
  <div></div>
  <div></div>
  <div></div>
  <div></div>
</body>

$( "body" ).find( "div" ).eq( 2 ).addClass( "red" );
// it finds the second div in the html body and change it to red color.

来源:http://www.snoopcode.com/JQuery/jquery-eq-selector

【讨论】:

"找到第二个 div" => eq(2) 不返回第三个 div?【参考方案4】:

get() 返回一个 DOM 元素,而 :eq()eq() 返回一个 jQuery 元素。由于 DOM 元素没有方法 fadeIn()失败

http://api.jquery.com/get/

说明: 检索 jQuery 对象匹配的 DOM 元素。

http://api.jquery.com/eq-selector/

说明:在匹配集中选择索引n处的元素。

【讨论】:

【参考方案5】:

我举一个例子来解释其他人在这里给出的观点。 考虑以下代码

<div id="example">
    Some text
    <div>Another div</div>
    <!--A comment-->
</div>

以及对应的js代码,

$(document).ready(function() 
    var div = $("#example").get(0);
    console.log(typeof(div));
    console.log(div);
    console.log("XXXXXXXXX");
    var div_eq=$('#example').eq(0);
    console.log(typeof(div_eq));
    console.log(div_eq);
    );

这就是你将看到的

 object
excercise1.js (line 5)
<div id="example">
excercise1.js (line 6)
XXXXXXXXX
excercise1.js (line 7)
object
excercise1.js (line 9)
Object[div#example]

第一个是 DOM 对象,而后者是 Jquery 包装的对象,您可以在其中调用 Jquery 方法

【讨论】:

【参考方案6】:

以其他答案为基础:

$('h2').get(0) === $('h2').eq(0)[0]  //true
$( $('h2').get(0) ) === $('h2').eq(0)  //true

【讨论】:

第一个是正确的。第二个不是。这两个对象不一样【参考方案7】:

get(0)(docs) 返回集合中的第一个 DOM 元素。

eq(0)(docs) 返回集合中的第一个 DOM 元素,包装在一个 jQuery 对象中。

这就是为什么 .fadeIn("slow"); 在您执行 .get(0) 时不起作用的原因。 DOM 元素没有 fadeIn() 方法,但 jQuery 对象有。

【讨论】:

【参考方案8】:

eq(i) 将接收者集合中的第 i 个成员作为 jQuery 对象检索,而 get(i) 将第 i 个位置的成员作为 DOM 元素返回。

这不起作用的原因:

$("h2").get(0).fadeIn("slow");

是因为h2 DOM 元素没有名为fadeIn 的方法。

你应该在这里使用eq(0)

【讨论】:

以上是关于jQuery : eq() 与 get()的主要内容,如果未能解决你的问题,请参考以下文章

JQ中get()与eq()的区别

JQuery中eq()和get()的区别

jquery dom,eq(index)和get(index)的区别

jQuery中get(index)和eq(index)区别和用法

jQuery-筛选

get([index])