#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()
кстати, я согласен с Ником Крейвером — используйте document.getElementById() …
Комментарии:
1. Это возвращает пустой массив, если элементы не найдены. Будьте осторожны, используя логические операторы in,
[]
которые будут eval totrue
.
Ответ №4:
$("#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()