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

#jquery #each #var

#javascript #jquery

Вопрос:

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

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

 var gridHeader = $("#grid_GridHeader")[0];
  

Ответ №1:

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

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

Комментарии:

1. За исключением того, что $("#id") /* jQuery object */ != $("#id").get(0) /* DOM Object */

2. @BrunoLM — Если вам нужен элемент DOM document.getElementById('id') , не создавайте объект jQuery только для того, чтобы выбросить его … это чрезвычайно расточительно, от механизма селектора до оболочки объекта, это просто перебор без уважительной причины 🙂

3. @NickCraver — Спасибо за это. Я просто заменил кучу document.getElementById('id') на $('#id')[0] , но мне не понравилось [0] . Ваш комментарий о расточительности заставил меня задуматься о define $0 = function(id){return document.getElementById(id);} , и теперь мне нравится $0('id') больше. Такое же количество символов, как $('#id') , я просто хотел бы, чтобы это могло быть $#('id')

4. Хотелось бы, чтобы был вариант этих методов, который возвращал ложное значение из пустого результирующего набора.

5. @NickCraver вы (были, 6 лет назад) предполагаете, что объект jQuery выбрасывается и что он используется только для получения элемента DOM.

Ответ №2:

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

Комментарии:

1. Я думаю, что это лучший способ решить вашу проблему здесь. Он хорошо читается, в отличие от .eq(0)

2. Это лучший способ и по соображениям производительности (например, когда у вас есть таблица с 1000 строками, нет необходимости создавать объект jquery из всех них)

Ответ №3:

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

 $('li').first()
  

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

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

Комментарии:

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

Ответ №4:

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

 $("#grid_GridHeader").eq(0)
  

Ответ №5:

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

 var header = $('.header:first')
  

Комментарии:

1. Возвращает массив с одним элементом.

Ответ №6:

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

  $("#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 ] );
  

Комментарии:

1. Спасибо за те, все остальное работает, кроме get(), который, похоже, не получает первый элемент.

2. На самом деле я вижу из ответа Ника Крейва, почему это не сработает

Ответ №7:

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