2013-01-24 30 views
7

Tôi có bảng trong dom trông như thế nàyDuyệt qua cột thứ hai trong một bảng trong 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> 

Tôi muốn lặp thông qua bảng này, chẳng hạn như $('#table').each(function(){}) nhưng tôi chỉ muốn lặp qua cột thứ hai . Vì vậy, những cái mà trong ví dụ này có giá trị b.

Bất kỳ ý tưởng nào về cách thực hiện việc này?

Cảm ơn bạn!

+0

Nó trông như thế này đã được hỏi và trả lời trước: http://stackoverflow.com/questions/6917143/loop-through-the- ô-of-a-cột-không-ô-của-một-hàng-với-jquery-hoặc-js-on – Marquez

Trả lời

21

Hãy thử điều này:

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

}); 
+0

Điều này cũng khớp với bất kỳ bảng lồng nhau nào trong bảng chính ... do đó một số phần tử 'td' có uld được kết hợp nhiều lần. Ngoài ra, bạn không cần phần 'tr', vì' td' luôn là con của 'tr'. Và nó dễ đọc hơn và dễ dàng hơn cho jQuery khi bạn sử dụng các công cụ như '.find' hoặc' .children' thay vì một chuỗi chọn lớn cho jQuery để phân tích cú pháp – Ian

10

Sử dụng nth-child chọn trong jQuery, điều này sẽ làm việc:

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

}); 

này sử dụng nth-child selector, http://api.jquery.com/nth-child-selector/, mà như các quốc gia liên kết, sẽ chọn tất cả <td> yếu tố đó là con thứ 2 của cha mẹ (sẽ là <tr>).

Dưới đây là một fiddle đó chứng tỏ nó: http://jsfiddle.net/GshRz/

Nếu bạn đang tìm kiếm một selector mà được các <td> s mà chỉ ngay trong bảng (như không trong một bảng lồng nhau), sau đó sử dụng một cái gì đó như:

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

}); 

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

Tùy thuộc vào cấu trúc của bạn (nơi bạn có thể bao gồm một <thead>), bạn có thể sử dụng .children("thead, tbody") thay vì chỉ .children("tbody").

Ngoài ra, trong trường hợp bạn muốn lấy một số cột, có thể dễ dàng chọn các phần tử <tr> và sau đó lấy các phần tử con <td>. Ví dụ:

$("#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/

gì selectors bạn sử dụng và ở đâu, tùy thuộc vào cấu trúc và nội dung của bảng. Vì vậy, hãy nhớ phân biệt giữa childrenfindnth-childeq.

+1

Cảm ơn bạn đã trả lời chi tiết, tôi đã tiếp tục và chọn @ namkha87, vì nó hoạt động và dường như nhanh hơn so với việc tìm kiếm() – dzm

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

Sample

Các vấn đề liên quan