Как получить первый элемент вместо использования [0] в jQuery?

95

Я новичок в jQuery, извиняюсь, если это глупый вопрос.

Когда я использую его для поиска элемента по идентификатору, я знаю, что всегда есть одно совпадение, и для доступа к нему я бы использовал индекс [0]. Есть ли лучший способ сделать это? Например,

var gridHeader = $("#grid_GridHeader")[0];
Рубанс
источник

Ответы:

101

Вы также можете использовать, .get(0)но ... вам не нужно делать это с элементом, найденным по идентификатору, который всегда должен быть уникальным. Я надеюсь, что это просто недосмотр в примере ... если это так на вашей реальной странице, вам нужно исправить это, чтобы ваши идентификаторы были уникальными, и вместо этого использовать класс (или другой атрибут).

.get()(например [0]) получает элемент DOM, если вы хотите использовать объект jQuery .eq(0)или .first()вместо этого :)

Ник Крейвер
источник
17
Кроме этого$("#id") /* jQuery object */ != $("#id").get(0) /* DOM Object */
BrunoLM
9
@BrunoLM - Если вам нужен элемент DOM, document.getElementById('id')не создавайте объект jQuery только для того, чтобы его выбросить ... это ужасно расточительно, от механизма выбора до оболочки объекта, это просто излишество без уважительной причины :)
Ник Craver
Ник: Я согласен, может быть, я был довольно глуп, просто использовал jquery для чего угодно.
Rubans
2
@NickCraver - Спасибо за это. Я просто заменил кучу document.getElementById('id')с , $('#id')[0]но не подобно [0]. Ваш комментарий о расточительности заставил меня задуматься над определением, $0 = function(id){return document.getElementById(id);}и теперь мне нравится $0('id')больше. Такое же количество символов, как $('#id'), я просто хотел бы, чтобы это могло быть$#('id')
Бруно Броноски,
2
Хотелось бы, чтобы был вариант этих методов, который возвращал бы ложное значение из пустого набора результатов.
Стивен М. Харрис
27

$("#grid_GridHeader:first") тоже работает.

Мервин
источник
3
Я думаю, что это лучший способ решить вашу проблему здесь. Читается хорошо, в отличие от .eq (0)
Дэйв Грегори,
Это является лучшим способом для повышения производительности тоже (например , когда у вас есть таблица с 1000 строк, не нужно , чтобы построить объект Jquery все из них)
Alex
18

Вы можете использовать первый способ:

$('li').first()

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

кстати, я согласен с Ником Крейвером - используйте document.getElementById () ...

Беннидхамма
источник
1
Это возвращает пустой массив, если элементы не найдены. Будьте осторожны, используя логические операторы, как []и eval true.
Эшли
4

При условии, что есть только один элемент:

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

... все эквивалентны, возвращая единственный базовый элемент.

Из исходного кода jQuery вы можете видеть, что get(0), по сути, делает то же самое, что и [0]подход:

 // Return just the object
 ( num < 0 ? this.slice(num)[ 0 ] : this[ num ] );
Кен Редлер
источник
Спасибо за то, что все остальное работает, кроме get (), который, похоже, не получает первый элемент.
Rubans
На самом деле я могу понять из ответа Ника Крейва, почему это не сработает
Рубанс
3

Вы можете использовать первый селектор.

var header = $('.header:first')
Мэтт
источник
Возвращает массив с одним элементом.
Нитин
-3

Вы можете попробовать вот так:
yourArray.shift()

хиджин
источник