2009-03-30 25 views
42

Hãy xem xét HTML sau. Nếu tôi có một tham chiếu JSON để các yếu tố < nút >, làm thế nào tôi có thể nhận được một tham chiếu đến ngoài <tr> phần tử trong cả hai trường hợpCó một bộ chọn/phương thức jQuery để tìm một cấp độ phần tử cha cụ thể n không?

<table id="my-table"> 
    <tr> 
     <td> 
      <button>Foo</button> 
     </td> 
     <td> 
      <div> 
       <button>Bar</button> 
      </div> 
     </td> 
    </tr> 
</table> 

<script type="text/js"> 
    $('#table button').click(function(){ 
     //$(this).parent().parent() will work for the first row 
     //$(this).parent().parent().parent() will work for the second row 
     //is there a selector or some magic json one liner that will climb 
     //the DOM tree until it hits a TR, or do I have to code this myself 
     //each time?    
     //$(this).???? 
    }); 
</script> 

Tôi biết tôi có thể trường hợp đặc biệt mỗi điều kiện, nhưng tôi hơn quan tâm "tuy nhiên sâu bạn xảy ra được, leo lên cây cho đến khi bạn tìm thấy phần tử X" phong cách giải pháp. Một cái gì đó như thế này, nhưng nhiều jQuery như/ít verbose

var climb = function(node, str_rule){ 
    if($(node).is(str_rule)){ 
     return node; 
    } 
    else if($(node).is('body')){ 
     return false; 
    } 
    else{ 
     return climb(node.parentNode, str_rule); 
    } 
}; 

tôi biết về phương pháp cha mẹ (expr), nhưng từ những gì tôi đã nhìn thấy là cho phép bạn lọc các bậc cha mẹ một cấp lên và KHÔNG leo lên cây cho đến khi bạn tìm expr (tôi rất muốn mã ví dụ chứng minh tôi sai)

Trả lời

85

chức năng parents làm những gì bạn muốn:

$(this).parents("tr:first"); 
+8

Hy vọng bạn không tâm trí, tôi đã thêm một liên kết đến tài liệu. –

+3

Tuyệt đối, cảm ơn! Đó là những gì "Chỉnh sửa bài viết của người khác" cho là;) – Seb

+1

Ha, đó là buồn cười. Tôi tự hỏi tại sao Visual jQuery liệt kê cha mẹ (expr) hai lần; hóa ra tôi hoàn toàn cách nhau s ở cuối. –

39

Ngoài ra, nếu bạn đang sử dụng jQuery 1.3+ bạn có thể sử dụng phương pháp closest

$(this).closest("tr"); 
+4

Chỉ muốn thêm rằng 'gần nhất' và' cha mẹ' là rất giống nhau nhưng có một sự khác biệt nhỏ. Bạn có thể đọc thêm [tại đây] (http://api.jquery.com/closest/#entry-longdesc). Nói chung, tôi nghĩ phương pháp 'gần nhất là hiệu quả hơn cho kịch bản cụ thể này. – aug

+0

hmm, rất dễ hiểu tên hàm này. –

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