2012-11-11 26 views
13

Tôi đang sử dụng JQuery để lặp qua tất cả TR trong bảng,Tìm TD đầu tiên bằng văn bản trong TR với JQuery

nhưng không phải tất cả các hàng đều có giá trị trong ô đầu tiên.

<TR> 
    <TD>3</TD> 
    <TD>2</TD> 
    <TD>1</TD> 
</TR> 
    <TD></TD> 
    <TD>3</TD> 
    <TD>2</TD> 
<TR> 
</TR> 
<TR> 
    <TD></TD> 
    <TD></TD> 
    <TD>3</TD> 
</TR> 

Làm cách nào để nhắm mục tiêu TD đầu tiên trong mỗi hàng không trống và không chỉ là đứa con đầu tiên?

Cảm ơn!

+1

Mã lặp lại của bạn trông như thế nào? –

Trả lời

19

Dưới đây là một giải pháp thanh lịch đơn giản hơn:

$('tr').find('td:not(:empty):first').css('background', 'red');​ 

Fiddle: http://jsfiddle.net/dandv/JRcEf/

Nó chỉ nói trong jQuery gì bạn có ý nghĩa: "nhắm mục tiêu đầu tiêntd trong mỗi tr đó là không trống ".

+0

Điều này thật tuyệt, tôi đã hy vọng một phương pháp chọn dựa trên nhưng không thể làm cho đúng. Cảm ơn! – BarakChamo

+1

@BarakChamo: Hãy coi chừng điều này sẽ yêu cầu ** jQuery ** để xử lý bộ chọn, nó sẽ không thể chuyển sang công cụ chọn của chính trình duyệt (nhiều, nhanh hơn). 99,9% thời gian không quan trọng, tất nhiên! –

0
var tds = []; 

$('#tableId tr').each(function() 
{ 
    $(this).find('td').each(function() 
    { 
    if ($(this).html() != '') 
    { 
     tds.push($(this)); 
     return false; 
    } 
    }); 
}); 

và voila trong biến tds bạn có thẻ td bạn

1

này tìm đứa trẻ phi trống đầu tiên td trong mỗi tr:

$("tr").each(function() { 
    var $firstNonEmptyCell; 

    $(this).children("td").each(function() { 
     var $td = $(this); 
     if ($td.text() === "") { 
      $firstNonEmptyCell = $td; 
      return false; // Breaks `each` loop 
     } 
    }); 

    // ...use `$firstNonEmptyCell` here 
}); 

Hoặc nếu bạn muốn có một wrapper jQuery cho tất cả các trường hợp không trống, đây là trường hợp sử dụng không đáng kể cho filter:

$("tr").each(function() { 
    var nonBlankCells = $(this).children("td").filter(function() { 
     return $(this).text() !== ""; 
    }); 

    // Use `nonBlankCells` here 
}); 
+1

Có thể là tầm thường, nhưng không đánh bại [one-liner] (http://stackoverflow.com/a/13330866/1269037);) –

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