如何在jQuery中获取第一个元素而不使用[0]?

110

我是jQuery的新手,如果这是一个愚蠢的问题,请原谅。

当我使用它通过id查找元素时,我知道总是只有一个匹配项,并且为了访问它,我需要使用索引[0]。是否有更好的方法来做这件事呢? 例如:

var gridHeader = $("#grid_GridHeader")[0];
7个回答

123
您可以使用.get(0),但如果使用ID查找元素,则不需要这样做,因为ID应该是唯一的。我希望这只是示例中的疏忽。如果实际页面也出现了这种情况,则需要修复ID以确保其唯一性,并改用类(或其他属性)。 .get()(像[0]一样)获取DOM元素,如果您想要一个jQuery对象,请使用.eq(0).first()。 :)

21
除非 $("#id") /* jQuery 对象 */ 不等于 $("#id").get(0) /* DOM 对象 */ - BrunoLM
11
如果你想要一个DOM元素,可以使用document.getElementById('id'),不要创建一个jQuery对象然后抛弃它……这样非常浪费资源,从选择器引擎到对象包装,这都是没有必要的过度设计。:) - Nick Craver
2
@NickCraver - 谢谢你。我刚刚用$('#id')[0]替换了一堆document.getElementById('id'),但是不喜欢[0]。你关于浪费的评论让我想到定义$0 = function(id){return document.getElementById(id);},现在我更喜欢$0('id')了。字符数与$('#id')相同,只是希望它可以是$#('id') - Bruno Bronosky
2
希望这些方法有一种变体,可以从空结果集返回一个虚假值。 - Stephen M. Harris
1
@NickCraver 你(6年前)假设jQuery对象被丢弃了,只用于获取DOM元素。 - Emile Bergeron
显示剩余2条评论

39

$("#grid_GridHeader:first") 同样有效。


3
我认为这是处理你的问题的最佳方法。相比.eq(0),它表达得更好。 - Dave Gregory
出于性能方面的考虑,这确实是最佳方式(例如,当您有一个包含1000行的表格时,就没有必要从中构造一个jquery对象)。 - Alex from Jitbit

24
你可以使用第一种方法:
$('li').first()

http://api.jquery.com/first/

顺便说一句,我同意Nick Craver的观点——使用document.getElementById()...


2
如果没有找到任何元素,这将返回一个空数组。在逻辑语句中使用时要小心,因为 [] 将被计算为 true - Ashley

6
您可以使用第一个选择器。
var header = $('.header:first')

2
返回一个只有一个元素的数组。 - Nitin

6

4

假设只有一个元素:

 $("#grid_GridHeader")[0]
 $("#grid_GridHeader").get(0)
 $("#grid_GridHeader").get()

get()、eq() 和 [] 都是等效的,它们都返回单个底层元素。

从 jQuery 源代码中可以看出,get(0) 实质上与 [0] 方法做的事情基本相同:

 // Return just the object
 ( num < 0 ? this.slice(num)[ 0 ] : this[ num ] );

除了get()函数好像无法获取第一个项目之外,其他所有东西都可以正常运行。谢谢。 - Rubans
实际上,我可以从Nick Crave的回复中看出为什么那样做不起作用。 - Rubans

-5
你可以尝试这样做:
yourArray.shift()

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接