2012-05-03 20 views
53

thể trùng lặp:
How to iterate a table rows with JQuery and access some cell values?jQuery mỗi vòng lặp trong dòng của bảng

Tôi gặp một cái gì đó như:

<table id="tblOne"> 
      <tbody> 
       <tr> 
        <td> 
         <table id="tblTwo"> 
          <tbody> 
           <tr> 
            <td> 
             Items 
            </td> 
           </tr> 
           <tr> 
            <td> 
             Prod 
            </td> 
           </tr> 
          </tbody> 
         </table> 
        </td> 
       </tr> 
       <tr> 
        <td> 
         Item 1 
        </td> 
       </tr> 
       <tr> 
        <td> 
         Item 2 
        </td> 
       </tr> 
      </tbody> 
     </table> 

Tôi đã viết jQuery để lặp qua từng tr như :

$('#tblOne tr').each(function() {...code...}); 

Nhưng vấn đề là nó lặp qua "tr" của "tblTwo" mà tôi cũng không muốn. Có ai vui lòng đề xuất điều gì đó để giải quyết vấn đề này không?

Trả lời

150

trong jQuery chỉ cần sử dụng

$('#tblOne > tbody > tr').each(function() {...code...}); 

sử dụng trẻ em chọn trực tiếp (>), bạn sẽ đi qua hậu duệ trực tiếp (và không tất cả hậu duệ)


trong VanillaJS bạn có thể sử dụng document.querySelectorAll() và đi bộ qua các hàng bằng cách sử dụng forEach()

[].forEach.call(document.querySelectorAll('#tblOne > tbody > tr'), function(tr) { 
    /* console.log(tr); */ 
}); 
+13

@Raynos vui lòng giải thích thay vì "nhấn và chạy" ... –

+2

Làm cách nào để tham chiếu đến phần tử tr trong hàm? – jumxozizi

+1

@Rubiksmomo - chức năng sử dụng (chỉ mục, phần tử) - https://api.jquery.com/each/ – FrenkyB

18

Sử dụng immediate children selector>:

$('#tblOne > tbody > tr') 

Mô tả: Chọn tất cả phần tử con trực tiếp định bởi "con" của yếu tố theo quy định của "cha mẹ".

50

Chỉ cần một đề nghị:

tôi khuyên bạn nên sử dụng thực hiện bảng DOM, nó rất thẳng về phía trước và dễ dàng để sử dụng, bạn thực sự không cần jQuery cho nhiệm vụ này.

var table = document.getElementById('tblOne'); 

var rowLength = table.rows.length; 

for(var i=0; i<rowLength; i+=1){ 
    var row = table.rows[i]; 

    //your code goes here, looping over every row. 
    //cells are accessed as easy 

    var cellLength = row.cells.length; 
    for(var y=0; y<cellLength; y+=1){ 
    var cell = row.cells[y]; 

    //do something with every cell here 
    } 
} 
+13

Tôi đồng ý rằng jQuery thường không thực sự cần thiết cho loại nhiệm vụ này (đặc biệt là trên trình duyệt mới hơn với '.querySelectorAll() ') nhưng nếu bạn đã bao gồm jQuery thì đó là một sự lãng phí không sử dụng nó (và giải pháp DOM với hai vòng lặp' for' không đơn giản như vậy, imho) – fcalderan

+0

Nhưng nếu bạn đã bao gồm jQuery thì bạn làm sai và cần để loại bỏ nó ASAP – Raynos

+0

*** sử dụng *** jQuery cũng có hậu quả. $() có khoảng 100 thứ trước khi nó thực sự chọn phần tử của bạn bằng id của nó (làm ví dụ). Tôi không nói không sử dụng nó ... nhưng đối với những thứ tầm thường như thế này, nơi mà các giải pháp vanilla js giống như một vài ký tự hơn để viết bạn đang tiết kiệm trên chế biến. mặc dù không nhiều ... nhưng tại sao làm 10 000/giây khi bạn có thể làm 10 000 000 .... chỉ có ý nghĩa không? – rlemon