Як отримати n-й елемент jQuery


311

У jQuery $("...").get(3)повертає 3-й елемент DOM. Яка функція повертати 3-й елемент jQuery?

Відповіді:


310

Чому б спочатку не переглянути сторінку (коротких) селекторів?

Ось він: :eq()оператор. Він використовується так само get(), але повертає об’єкт jQuery.

Або ви можете також використовувати .eq()функцію.


23
Хіба це не повинно бути .eq()замість :eq()?
RubenGeert

15
Так, .eq()більше підходить для питання ОП. :eq()використовується в параметрі рядка до $, тоді .eq()як це метод для існуючого об'єкта jQuery.
mjswensen

55
Я клянусь , що я повинен піти і подивитися це вгору кожен . одиночний . час .
ivarni

3
@JoelWorsham Залежить від бажаної поведінки. $('select').find('option').eq(n)в основному буде ігнорувати групування та отримувати всі варіанти в цілому. Якщо ви хочете, щоб це було в групі, щось подібне необхідно:$('select').find('optgroup').each(function() { $(this).find('option').eq(n)...; })
Дікам

4
"Чому б спочатку не переглянути сторінку (коротких) селекторів?" - Тому що "eq" - це дуже погана назва, і я регулярно просто пропускаю його, оскільки еквівалент для мене означає порівняння ....
mmlac

309

Ви можете використовувати : селектор eq , наприклад:

$("td:eq(2)").css("color", "red"); // gets the third td element

Або функція eq (int) :

$("td").eq(2).css("color", "red");

Також пам’ятайте, що індекси базуються на нулі.


7
Як синонім, ви також можете використовувати :nth()селектор - не плутати:nth-child()
user123444555621

Краща відповідь і не відредагований через 3 роки після факту :)
Андрій

дякую, що насправді пояснили, як користуватися селектором / функцією
Джозеф Роджерс

49

якщо у вас є контроль над запитом, який будує об’єкт jQuery, використовуйте :eq()

$("div:eq(2)")

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

var $thirdElement = $jqObj.eq(2);

Або якщо ви хочете їхній розділ (скажімо, третій, четвертий та п’ятий елементи), використовуйте .slice()

var $third4th5thElements = $jqObj.slice(2, 5);

Шукав фрагмент, але не знав, як шукати. Дякуємо, що вийшли за рамки того, що потрібно в оригінальному запитанні.
Самік Р

4
Для людей, які натрапляють на цю відповідь, корисним моментом є зауваження, що селектор n-ї дитини - 1, а: eq або .eq () - 0,
Sudhanshu Mishra

1
Ви повинні використовувати .eq()замість :eq()насправді. Невелике підвищення продуктивності.
Qwerty

13

Я думаю, ти можеш цим скористатися

$("ul li:nth-child(2)").append("<span> - 2nd!</span>");

Він знаходить друге лі в кожному зібраному ul і відзначає його.


11

.eq () - Ціле число, що вказує на елемент, заснований на 0.

Наприклад:

Розглянемо сторінку з простим списком на ній:

<ul>
<li>list item 1</li>
<li>list item 2</li>
<li>list item 3</li>
<li>list item 4</li>
</ul>

Ми можемо застосувати цей метод до набору елементів списку:

$( "li" ).eq( 2 ).css( "background-color", "red" );

Для отримання додаткової інформації: .eq ()


3

Якщо у вас вже є об'єкт jquery у змінній, ви також можете просто розглянути його як звичайний індексований масив без використання jquery:

var all_rows = $("tr");
for(var i=0; i < all_rows.length; i++){
   var row = all_rows[i];
   //additionally, you can use it again in a jquery selector
   $(row).css("background-color","black");
}

Хоча вищенаведений приклад жодним чином не корисний, він представляє, як ви можете ставитися до об'єктів, створених jquery, як до індексованих масивів.


Правильно, і ще один (сподіваємось корисний) підказку: Якщо рядок містить список <select>елементів, і ви хочете, щоб вибраний елемент комбобоксу, використовуйте$(row).val();
Метт

2

Якщо я правильно розумію ваше запитання, ви завжди можете просто перетворити функцію get так:

var $someJqueryEl = $($('.myJqueryEls').get(3));

3
Це просто "важкий шлях", і це те, що eq()дає вам безкоштовно.
Каумони

1

Якщо ви хочете отримати певний елемент / вузол або тег у циклі, наприклад

<p class="weekday" data-today="monday">Monday</p>
<p class="weekday" data-today="tuesday">Tuesday</p>
<p class="weekday" data-today="wednesday">Wednesday</p>
<p class="weekday" data-today="thursday">Thursday</p>

Отже, зверху виконується цикл коду, і ми хочемо вибрати для цього певне поле, ми повинні використовувати вибір jQuery, який може вибрати лише елемент, що очікує зверху, і код буде

$('.weekdays:eq(n)');

напр

$('.weekdays:eq(0)');

а також іншим методом

$('.weekday').find('p').first('.weekdays').next()/last()/prev();

але перший метод є більш ефективним, коли HTML <tag>має унікальну назву класу.

ПРИМІТКА. Другий метод - це використання, коли їх ім'я класу в цільовому елементі чи вузлі немає.

детальніше читайте на https://api.jquery.com/eq/


0

Для ітерацій із використанням селектора, здається, немає сенсу:

var some = $( '...' );

for( i = some.length -1; i>=0; --i )
{
   // Have to transform in a jquery object again:
   //
   var item = $( some[ i ] );

   // use item at will
   // ...
}

0

Живий приклад для доступу та видалення N-го елемента за допомогою jQuery:

<html>
<head></head>
<body>
    <script type="text/javascript" 
    src="http://code.jquery.com/jquery-2.1.0.min.js"></script>
    <script type="text/javascript">
      $(document).ready(function(){
        $('li:eq(1)').hide();
      });
    </script>
    <ol>
      <li>First</li>
      <li>Second</li>
      <li>Third</li>
    </ol>
</body>
</html>

Під час його запуску в упорядкованому списку є два пункти, які показують: Перший та Третій. Другий був схований.


PS: Відлік починається від 0; Перший - в індексі 0, другий - в індексі 1 і так далі ....
KNU

0
 $(function(){
            $(document).find('div').siblings().each(function(){
                var obj = $(this);
                obj.find('div').each(function(){
                    var obj1 = $(this);
                    if(!obj1.children().length > 0){
                        alert(obj1.html());
                    }
                });

            });
        });

<div id="2">
    <div>
        <div>
            <div>XYZ Pvt. Ltd.</div>
        </div>
    </div>
</div>
<div id="3">
    <div>
        <div>
            <div>ABC Pvt Ltd.</div>
        </div>
    </div>
</div>

"$ (function () {" першої осені я створив анонімну функцію, яка запускалася автоматично. Всередині цього я знайшов трьох батьківських дів за допомогою братів і сестер. Потім я повторив усі 3 батьківські діви та перевірив довжину кожної довжини дітей. Як я можу визначити, що це останній діл чи ні в батьківському діві. Тепер я попереджую останній html-код кожного 3 головного батьківського діла.
Sanjay Verma,

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