Як отримати перший елемент, а не використовувати [0] у jQuery?


91

Я новачок у jQuery, вибачте, якщо це дурне запитання.

Коли я використовую його, щоб знайти елемент, використовуючи ідентифікатор, я знаю, що завжди один збіг, і для доступу до нього я б використовував індекс [0]. Чи є кращий спосіб зробити це? Наприклад,

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

Відповіді:


98

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

.get()(like [0]) отримує елемент DOM, якщо ви хочете використовувати об'єкт jQuery .eq(0)або .first()замість цього :)


17
Крім цього$("#id") /* jQuery object */ != $("#id").get(0) /* DOM Object */
BrunoLM

9
@BrunoLM - Якщо ви хочете елемент DOM, document.getElementById('id')не створюйте об'єкт jQuery, щоб просто викинути його ... це надзвичайно марно, від механізму селектора до обгортки об'єкта, це просто надмірно без поважних причин :)
Нік Кравер

Нік, я погоджуюсь, можливо, я був досить дурним, просто використовуючи jquery для чого-небудь.
Рубанс

2
@NickCraver - Дякую за це. Я просто замінив купу document.getElementById('id')з , $('#id')[0]але не подібно [0]. Ваш коментар щодо марнотратства змусив мене визначитись, $0 = function(id){return document.getElementById(id);}і тепер мені подобається $0('id')краще. $('#id')$#('id')
Стільки

2
Як би хотілося, щоб був варіант цих методів, який повертав хибне значення з порожнього набору результатів.
Stephen M. Harris

25

$("#grid_GridHeader:first") працює також.


3
Я думаю, що це найкращий спосіб вирішити вашу проблему тут. Він добре читається, на відміну від .eq (0)
Дейв Грегорі,

18

Ви можете використовувати перший метод:

$('li').first()

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

До речі, я погоджуюсь з Ніком Кравером - використовуйте document.getElementById () ...


1
Це повертає порожній масив, якщо не знайдено жодного елемента. Будьте обережні, використовуючи логічні висловлювання, як це []буде до 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 (), який, здається, не отримує першого елемента.
Рубанс

Насправді я бачу з відповіді Ніка Крейва, чому це не спрацює
Рубанс


3

Ви можете використовувати перший селектор.

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

Повертає масив з одним елементом.
Нітін,

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.