Отримайте другу дитину за допомогою jQuery


188
$(t).html()

повертає

<td>test1</td><td>test2</td>

Я хочу отримати друге tdз $(t)об’єкта. Я шукав рішення, але нічого не працювало для мене. Будь-яка ідея, як отримати другий елемент?

Відповіді:


350

схопити другу дитину:

$(t).children().eq(1);

або, схопіть другу дитину <td>:

$(t).children('td').eq(1);

2
Яка різниця між $(t).children('td').eq(1)і$(t).children()[1]
Green Lei

6
@GreenLei добре для початку перший повертає об’єкт jQuery, другий повертає об'єкт Node
anthonygore

2
Це також працює для find()методу jQuery? Як $(t).find('td').eq(1)для отримання другого <td>, якщо t, скажімо, була таблиця, і мені потрібно було дивитись більше ніж на 1 вузол?
Джастін Л.

Я не міг .children('td').eq(1)чомусь дістатися до роботи, але .find('td').eq(1)працював просто чудово.
SharpC

27

Ось таке рішення, яке, можливо, зрозуміліше читати в коді:

Щоб отримати другу дитину з упорядкованого списку:

   $('ul:first-child').next()

І більш детальний приклад: Цей код отримує текст атрибута 'title' 2-го дочірнього елемента UL, ідентифікованого як 'my_list':

   $('ul#my_list:first-child').next().attr("title")

У цьому другому прикладі ви можете позбутися 'ul' на початку селектора, оскільки це зайве, оскільки ідентифікатор повинен бути унікальним для однієї сторінки. Це тільки для додання ясності прикладу.

Зверніть увагу на продуктивність та пам'ять , ці два приклади є хорошими виконавцями, оскільки вони не змушують jquery зберегти список елементів ul, які після цього потрібно було відфільтрувати.


Хоча ми піклуємося про ефективність, давайте продовжувати та зберігати посилання на те, ulщоб нам не довелося його шукати.
daniel1426

22

Як це:

$(t).first().next()

ОСНОВНЕ ОНОВЛЕННЯ:

Крім того, як красиво виглядає відповідь, ви також повинні задуматися над виконанням коду. Тому доречно також знати, що саме є в $(t)змінній. Це масив <TD>чи це <TR>вузол з кількома <TD>sвсередині нього? Щоб додатково проілюструвати точку, дивіться результати jsPerf у <ul>списку з 50 <li>дітьми:

http://jsperf.com/second-child-selector

$(t).first().next()Метод є найшвидшим тут, на сьогоднішній день.

Але, з іншого боку, якщо ви візьмете <tr>вузол і знайдете <td>дітей і проведете те саме тестування, результати не будуть однаковими.

Сподіваюся, це допомагає. :)




8

Окрім використання методів jQuery, ви можете використовувати і рідну cellsколекцію, яку <tr>ви отримуєте.

$(t)[0].cells[1].innerHTML

Якщо припустити t, що це елемент DOM, ви можете обійти створення об'єкта jQuery.

t.cells[1].innerHTML

3

Дивно бачити, що ніхто не згадав про рідний спосіб JS.

Без jQuery:

Просто отримайте доступ до childrenвластивості батьківського елемента. Він поверне живий HTMLCollection дітей елементів, до яких можна отримати доступ за допомогою індексу. Якщо ви хочете отримати другу дитину:

parentElement.children[1];

У вашому випадку щось подібне може спрацювати: (приклад)

var secondChild = document.querySelector('.parent').children[1];

console.log(secondChild); // <td>element two</td>
<table>
    <tr class="parent">
        <td>element one</td>
        <td>element two</td>
    </tr>
</table>

Ви також можете використовувати комбінацію CSS3-селекторів / querySelector()та використовувати :nth-of-type(). Цей метод може працювати краще в деяких випадках, оскільки в цьому випадку ви також можете вказати тип елемента td:nth-of-type(2) (приклад)

var secondChild = document.querySelector('.parent > td:nth-of-type(2)');

console.log(secondChild); // <td>element two</td>

1

Використовуйте .find()метод

$(t).find("td:eq(1)");

td:eq(x) // x is index of child you want to retrieve. eq(1) means equal to 1. //1 denote second element


<table> <tr class = "parent"> <td> Елемент один </td> <td> Елемент другий </td> </tr> </table>

Якщо інформація у вашому коментарі відповідає вашій відповіді, будь ласка, додайте деталі до свого повідомлення за допомогою редагування. У будь-якому випадку видаліть коментар.
mickmackusa

1

Ви можете використовувати два методи в jQuery, як наведено нижче-

Використання jQuery: nth-child Selector Ви поставили позицію елемента як його аргумент, який дорівнює 2, як ви хочете вибрати другий елемент li.

$( "ul li:nth-child(2)" ).click(function(){
  //do something
});

Використання jQuery: eq () Selector

Якщо ви хочете отримати точний елемент, вам слід вказати значення індексу елемента. Елемент списку починається з індексу 0. Щоб вибрати 2-й елемент li, вам потрібно використовувати 2 як аргумент.

$( "ul li:eq(1)" ).click(function(){
  //do something
});

Див. Приклад: Отримайте другий дочірній елемент списку в jQuery

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