jQuery:eq()vs get()

时间:2011-01-17 03:04:51

标签: jquery jquery-selectors

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

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

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

8 个答案:

答案 0 :(得分:184)

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

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

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

答案 1 :(得分:16)

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

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

  

描述:检索与jQuery对象匹配的DOM元素。

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

  

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

答案 2 :(得分:12)

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

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

这就是.fadeIn("slow");执行.get(0)时无效的原因。 DOM元素没有fadeIn()方法,但jQuery对象没有。

答案 3 :(得分:6)

以其他答案为基础:

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

答案 4 :(得分:5)

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

这不起作用的原因:

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

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

您应该在此使用eq(0)

答案 5 :(得分:0)

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

<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 :(得分:0)

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

答案 7 :(得分:0)

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

  1. 如果你没有将参数传递给.get(),它将返回一个DOM元素数组。

  2. 如果你使用get()得到一个DOM对象,就像 var s = $("#id").get(0) 您只需使用此$(s)

  3. 即可将其重新转换为jQuery对象
  4. 如果您不想使用$obj[i],可以使用$obj.get(i)作为替代方式,请参阅下文,

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