Зачем использовать jQuery (selector).get(0) вместо jQuery (selector) [0], чтобы получить элемент DOM?

С помощью jQuery можно ли использовать $(selector).get(0) over $(selector)[0], если я просто хочу получить первый элемент в массиве jQuery как элемент DOM?

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() без аргументов, чтобы возвращать все элементы DOM массива jQuery.

Ответ 1

.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]);
},

Ответ 2

В интересах скорости я создал 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/ (требуется около минуты)

Ответ 3

У меня слишком низкая репутация, чтобы прокомментировать ответ ericbowden, но вот тест jsperf, сравнивающий две операции:

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

Консенсус (на Chrome 32): в основном то же самое, очень незначительное преимущество по отношению к [0]