Pobierz drugie dziecko za pomocą jQuery

$(t).html()

Zwraca

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

Chcę pobrać drugi td z $(t) obiektu. Szukałam rozwiązania, ale nic mi nie wyszło. Jakiś pomysł, jak zdobyć drugi element?

Author: Jeroen, 2011-01-18

9 answers

Weź drugie dziecko:

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

Lub, weź drugie dziecko <td>:

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

Zobacz dokumentację children oraz eq.

 362
Author: davin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2021-01-15 15:42:32

Oto rozwiązanie, które być może jest jaśniejsze do odczytania w kodzie:

Aby uzyskać drugie dziecko z listy nieuporządkowanej:

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

I bardziej rozbudowany przykład: Ten kod otrzymuje tekst atrybutu "title" drugiego elementu potomnego UL identyfikowanego jako "my_list":

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

W tym drugim przykładzie można pozbyć się 'ul' na początku selektora, ponieważ jest zbędny, ponieważ identyfikator powinien być unikalny dla pojedynczej strony. Jest tam tylko po to, aby dodać jasności na przykład.

Uwaga na wydajność i pamięć, te dwa przykłady są dobrymi performantami, ponieważ nie sprawiają, że jquery zapisuje listę UL elementów, które musiały być następnie filtrowane.

 27
Author: stackex,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-01-11 13:46:58

Jak to jest:

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

GŁÓWNA AKTUALIZACJA:

Oprócz tego, jak pięknie wygląda odpowiedź, musisz również zastanowić się nad wydajnością kodu. Dlatego też warto wiedzieć, co dokładnie znajduje się w zmiennej $(t). Czy jest to tablica <TD> czy jest to <TR> węzeł z kilkoma <TD>s wewnątrz? Aby jeszcze bardziej zilustrować punkt, Zobacz Wyniki jsPerf na liście <ul> z 50 <li> dzieci:

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

Metoda $(t).first().next() jest najszybsza tutaj.

Ale z drugiej strony, jeśli weźmiesz węzeł <tr> i znajdziesz dzieci <td> i wykonasz ten sam test, wyniki nie będą takie same.

Mam nadzieję, że to pomoże. :)
 24
Author: kumarharsh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-06-22 13:45:43

Nie widziałem tego tutaj, ale możesz również użyć selektorów CSS spec. Zobacz dokumenty

$('#parentContainer td:nth-child(2)')
 17
Author: Just Plain High,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-07-30 04:22:58

Spróbuj tego:

$("td:eq(1)", $(t))

Lub

$("td", $(t)).eq(1)
 10
Author: Chandu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-01-18 17:53:03

Oprócz używania metod jQuery, możesz użyć natywnej kolekcji cells, którą daje ci <tr>.

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

Zakładając, że t jest elementem DOM, możesz ominąć tworzenie obiektu jQuery.

t.cells[1].innerHTML
 9
Author: user113716,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-12-20 17:53:13

zaskakujące jest to, że nikt nie wspomniał o rodzimym sposobie JS na to..

Bez jQuery:

Wystarczy wejść do children właściwość elementu nadrzędnego. Zwróci live HTMLCollection elementów potomnych, do których można uzyskać dostęp za pomocą indeksu. Jeśli chcesz mieć drugie dziecko:

parentElement.children[1];

W Twoim przypadku, coś takiego może zadziałać: (przykład)

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>

Można również użyć kombinacji Selektory CSS3/ querySelector() i wykorzystać :nth-of-type(). Ta metoda może działać lepiej w niektórych przypadkach, ponieważ można również określić typ elementu, w tym przypadku td:nth-of-type(2) (przykład)

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

console.log(secondChild); // <td>element two</td>
 3
Author: Josh Crozier,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-06-20 09:12:55

Użyj metody .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

 1
Author: ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-11-21 07:35:04

Możesz użyć dwóch metod w jQuery, jak podano poniżej -

Używanie jQuery: Nth-child Selector Umieściłeś pozycję elementu jako jego argument, który jest 2, Jak chcesz wybrać drugi element li.

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

Using jQuery: EQ () Selector

Jeśli chcesz uzyskać dokładny element, musisz podać wartość indeksu elementu. Element listy zaczyna się od indeksu 0. Aby wybrać 2 element li, musisz użyć 2 jako kłótnia.

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

Zobacz przykład: Get Second Child Element of List in jQuery

 1
Author: user8126644,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-01-02 17:41:16