2010-05-28 37 views
23

Tôi đang cố gắng lấy giá trị của td đầu tiên trong mỗi tr khi người dùng nhấp vào "nhấp".Jquery- Nhận giá trị của td đầu tiên trong bảng

Kết quả dưới đây sẽ xuất ra aa, ee hoặc ii. Tôi đã suy nghĩ về việc sử dụng gần nhất ('tr') .. nhưng nó luôn luôn xuất "Object object". Không chắc chắn phải làm gì với cái này.

html của tôi là

<table> 
<tr> 
    <td>aa</td> 
    <td>bb</td> 
    <td>cc</td> 
    <td>dd</td> 
    <td><a href="#" class="hit">click</a></td> 

</tr> 
<tr> 
    <td>ee</td> 
    <td>ff</td> 
    <td>gg</td> 
    <td>hh</td> 
    <td><a href="#" class="hit">click</a></td> 
</tr> 
<tr> 
    <td>ii</td> 
    <td>jj</td> 
    <td>kk</td> 
    <td>ll</td> 
    <td><a href="#" class="hit">click</a></td> 
</tr> 

</table> 

Jquery

$(".hit").click(function(){ 

var value=$(this).// not sure what to do here 

alert(value) ; 

}); 

Trả lời

53
$(this).parent().siblings(":first").text() 

parent mang đến cho bạn <td> xung quanh liên kết,

siblings mang đến cho tất cả các <td> thẻ trong đó <tr>,

:first cung cấp phần tử được so khớp đầu tiên trong tập hợp.

text() cung cấp nội dung của thẻ.

33

này nên làm việc:

$(".hit").click(function(){  
    var value=$(this).closest('tr').children('td:first').text(); 
    alert(value);  
}); 

Giải thích:

  • .closest('tr') được tổ tiên gần đó là một yếu tố <tr> (vì vậy trong trường hợp này hàng nơi các yếu tố <a> là trong).
  • .children('td:first') lấy tất cả các phần tử con của phần tử này, nhưng với bộ chọn :first, chúng tôi sẽ giảm nó xuống thành phần <td> đầu tiên.
  • .text() nhận được văn bản bên trong phần tử

Như bạn có thể nhìn thấy từ câu trả lời khác, có nhiều hơn một cách duy nhất để làm điều này.

+0

Tất cả các bạn đưa ra câu trả lời đúng! Vì bạn đã có 16K và Tesserex trả lời tôi trước. Tôi sẽ đưa ra câu trả lời được chấp nhận cho Tesserex. Cảm ơn rất nhiều! +1 cho tất cả. – FlyingCat

+0

".children ('td: first')" chỉ là những gì tôi cần. – radbyx

3

Cài đặt firebug và sử dụng console.log thay vì alert. Sau đó, bạn sẽ thấy các yếu tố chính xác truy cập của bạn.

4
$(".hit").click(function(){ 
    var values = []; 
    var table = $(this).closest("table"); 
    table.find("tr").each(function() { 
     values.push($(this).find("td:first").html()); 
    }); 

    alert(values);  
}); 

Bạn nên tránh $(".hit") nó thực sự không hiệu quả. Hãy thử sử dụng ủy quyền sự kiện để thay thế.

+0

Tôi nghĩ rằng OP muốn lấy giá trị của ô đầu tiên trong hàng hiện tại, không phải tất cả các hàng. –

9

Trong trường hợp cụ thể ở trên, bạn có thể làm phụ huynh/trẻ em tung hứng.

$(this).parents("tr").children("td:first").text() 
+0

'gần nhất' chỉ tìm kiếm tổ tiên của phần tử hiện tại. Ví dụ thứ hai của bạn sẽ không hoạt động. Và ví dụ đầu tiên của bạn không hoạt động vì 'parent()' chỉ duyệt qua khi lên cấp trong phân cấp DOM (bạn có thể có nghĩa là 'parent()'). –

+0

Đã chỉnh sửa cho đúng. – Inaimathi

2

Nếu bạn cần để có được tất cả của td bên trong tr mà không xác định id cho họ, bạn có thể sử dụng đoạn mã sau:

var items = new Array(); 

$('#TABLE_ID td:nth-child(1)').each(function() { 
     items.push($(this).html()); 
}); 

Đoạn mã trên sẽ thêm tất cả các ô đầu tiên bên trong Bảng vào một mảng biến.

bạn có thể thay đổi nth-child (1) có nghĩa là ô đầu tiên cho bất kỳ số ô nào bạn cần.

hy vọng mã này sẽ giúp bạn.

0

Nhận giá trị td đầu tiên trên nhấp chuột td cuối cùng trong bảng

$(this).parent().siblings(":first").text() 
Các vấn đề liên quan