2013-01-24 13 views
7

Mam tabelę w dom, który wygląda takiterację drugiej kolumny w tabeli w jQuery

<div id="table"> 
<table> 
<tr> 
    <td>a</td> 
    <td>b</td> 
    <td>c</td> 
    <td>d</td> 
</tr> 
<tr> 
    <td>a</td> 
    <td>b</td> 
    <td>c</td> 
    <td>d</td> 
</tr> 
</div> 

chcę iterację tej tabeli, takich jak $('#table').each(function(){}) ale chcę tylko iterację drugiej kolumnie . Tak więc te, które w tym przykładzie mają wartość b.

Jakieś pomysły, jak to zrobić?

Dziękujemy!

+0

Wygląda na to, został poproszony przed i odpowiedział: http://stackoverflow.com/questions/6917143/loop-through-the- komórki-kolumny-nie-komórki-wiersza-z-jquery-or-js-on – Marquez

Odpowiedz

21

Spróbuj tego:

$("table tr td:nth-child(2)").each(function() { 

}); 
+0

To również pasuje do wszystkich zagnieżdżonych tabel wewnątrz głównego stołu ... więc niektóre elementy 'td' co Pasują do siebie kilka razy. Ponadto nie potrzebujesz części 'tr', ponieważ' td' jest zawsze dzieckiem 'tr'. I jest bardziej czytelny i łatwiejszy w jQuery, gdy używasz takich rzeczy jak '.find' lub' .children' zamiast dużego łańcucha selektora do jQuery do parsowania – Ian

10

Korzystanie z selektora w jQuery nth-child, to powinno działać:

$("#table").find("td:nth-child(2)").each(function() { 

}); 

używa selektor nth-child, http://api.jquery.com/nth-child-selector/, który jak twierdzi łącza, by wybrać wszystkie <td> elementy, które są 2nd dzieckiem swojego rodzica (który byłby <tr>).

Oto skrzypce że pokazuje to: http://jsfiddle.net/GshRz/

Jeśli szukasz selektora że dostaje <td> s, które są tylko bezpośrednio w tabeli (jak nie w tabeli zagnieżdżonej), a następnie użyć coś takiego:

$("#table").children("tbody").children("tr").children("td:nth-child(2)").each(function() { 

}); 

http://jsfiddle.net/GshRz/1/

zależności od swojej struktury (gdzie może zawierać <thead>), można użyć .children("thead, tbody") zamiast tylko .children("tbody").

Również w przypadku, gdy chcesz zdobyć kilka kolumn, łatwiej będzie wybrać elementy <tr>, a następnie pobrać elementy ich dzieci: <td>. Na przykład:

$("#table1").children("tbody").children("tr").each(function (i) { 
    var $this = $(this); 
    var my_td = $this.children("td"); 
    var second_col = my_td.eq(1); 
    var third_col = my_td.eq(2); 
    console.log("Second Column Value (row " + i + "): " + second_col.html()); 
    console.log("Third Column Value (row " + i + "): " + third_col.html()); 
}); 

http://jsfiddle.net/GshRz/2/

Co selektory użyć i gdzie jest do struktury i zawartości tabeli. Pamiętaj więc, aby rozróżnić między children i find, a nth-child i eq.

+1

Dzięki za szczegółową odpowiedź, poszedłem do przodu i wybrałem @ namkha87, ponieważ działa i wydaje się być szybszy niż robienie find() – dzm

0
$("#table td:nth-child(2)").each(function (index) { 
    alert('Row no. ' + (index+1) + ', Column 2 : ' + $(this).html()); 
}); 

Sample

Powiązane problemy