20

如果我只想将 jQuery 数组中的第一项作为 DOM 元素,使用 jQuery 使用$(selector).get(0)over有什么好处吗?$(selector)[0]

HTML:

<form id="myForm"></form>

Javascript:

var selector = '#myForm';
var domElement = $(selector).get(0); //Returns [object HTMLFormElement]

//Or
var domElement = $(selector)[0]; //Also returns [object HTMLFormElement]
  • .get()是要输入更多的字符。
  • $(selector)如果为空 ( undefined)则两种方法都返回相同的结果
  • jQuery 文档.get()说明您可以简单地使用索引访问器来获取第 n 个元素,但您没有获得其他好处,.get()例如使用负数从数组末尾返回项目。
  • 此外,您可以.get()不带参数调用以返回 jQuery 数组的所有 DOM 元素。
4

4 回答 4

32

.get允许您使用负索引。例如:

<span>1</span>
<span>2</span>
<span>3</span>

$("span").get(-1);指第三种span

但是如果您不需要该功能并且只想选择一个元素.get(0)并且[0]是相同的。注意this[num]

// jQuery code
get: function (num) {
    return num == null ?

    // Return a 'clean' array
    this.toArray() :

    // Return just the object
    (num < 0 ? this[this.length + num] : this[num]);
},
于 2013-01-24T15:19:01.970 回答
7

我的代表太低了,无法评论 ericbowden 的答案,但这是一个比较这两种操作的 jsperf 测试:

http://jsperf.com/selector-get-0-vs-selector-0

共识(在 Chrome 32 上):基本相同,优势很小[0]

于 2014-02-28T00:46:54.580 回答
6

为了提高速度,我创建了一个 jsfiddle,它每 10,000,000 次循环。我创建了两个测试,在文档的开头有一个表单,在文档的结尾有 1200 行虚拟 HTML。以下是一些初步结果:

Test1
form at beginning with .get(0): 15981ms - faster
form at beginning with [0]:     16089ms
form at end with .get(0):       16554ms
form at end with [0]:           15969ms - faster

Test2
form at beginning with .get(0): 14137ms
form at beginning with [0]:     14034ms - faster
form at end with .get(0):       13756ms - faster
form at end with [0]:           14492ms

Test3
form at beginning with .get(0): 15952ms - faster
form at beginning with [0]:     16810ms
form at end with .get(0):       15905ms
form at end with [0]:           15532ms - faster

看起来速度上没有显着差异。但是,您必须检查不同的浏览器才能确定。

您可以在这里查看小提琴:http: //jsfiddle.net/AFfYx/(运行大约需要一分钟)

于 2013-01-24T15:59:46.053 回答
1

作为人类代码可读性的热心粉丝,我认为这两种方法都不能令人满意。看起来太像容器索引了.get(0)[0]将 jQuery 对象转换为 DOM 对象时,风险更大。所以我介绍了一个函数来命名发生了什么。

function dom_from_$($jquery_object) {
    var dom_object = $jquery_object.get(0);
    return dom_object;
}

像这样使用:

var dom = dom_from_$($(selector));

我还有一个以 形式命名转换函数的策略x_from_y,如x = x_from_y(y); 注意$美元符号彼此接近的方式。

于 2020-06-26T13:24:50.593 回答