2012-12-19 29 views
12

Tôi có một bảng nơi nhấp vào một liên kết sẽ hiển thị 'dòng phụ' thuộc về dữ liệu trong hàng được nhấp.Chuyển đổi số biến của các hàng trong bảng

Vì số lượng phụ có thể thay đổi từ 0 đến n Tôi nghĩ tôi nên tính toán số lượng con của phương thức .val, điều này có đúng không? Vì vậy, giá trị phải là số hàng trơ ​​trọi với tên lớp 'liên kết' cho đến tr tiếp theo mà không có tên lớp. Tôi có thể làm cái này như thế nào? Tôi đã thực hiện một số nỗ lực nhưng tôi khá mới với jQuery.

Tôi nghĩ một cái gì đó như thế này để tính toán số lượng tr.affiliated:

var affiliatednumber = $(this).find("tr.affiliated").val().stop(); 

DEMO

+0

Tại sao bạn không sử dụng thuộc tính ID? có lẽ sẽ làm cho cuộc sống của bạn dễ dàng hơn rất nhiều –

Trả lời

3

http://jsfiddle.net/6t6QT/2/

Việc bạn sử dụng .val.stop không có ý nghĩa, và bạn không sử dụng một đầu vào nhưng một a. Tôi đã sử dụng .nextUntil vì các hàng sẽ được nhóm lại với nhau; chỉ cần tìm hàng cha mẹ gần nhất của a (đây là hàng "chính") và sử dụng .nextUntil để tìm các hàng liên kết của nó - tiếp theo cho đến hàng chính khác. Nó cũng sẽ giúp đỡ nếu các hàng chủ có lớp riêng của họ.

+0

Cảm ơn lời giải thích, vẫn học được rất nhiều, một trong những điều đầu tiên tôi đã cố gắng viết. Giải pháp có vẻ tốt và không yêu cầu bất kỳ thay đổi html nào. Đánh giá cao sự giúp đỡ của bạn! – user1901096

+0

Xin lỗi vì đã làm phiền bạn một lần nữa vì điều này, nhưng tôi đã tìm thấy 'lỗi', đôi khi tôi cần dữ liệu của hai tr cùng nhau. Trong trường hợp này vợ của John và John, vấn đề là phương pháp gần nhất không còn hoạt động nữa, xem ví dụ: http://jsfiddle.net/6t6QT/2/ Làm cách nào để khắc phục điều này? – user1901096

+0

@ user1901096 Tôi không thấy bất cứ điều gì về vợ của John .. bạn có ý định đăng một liên kết riêng biệt không? –

8

Nếu bạn đặt một lớp trên mỗi phụ huynh tr bạn có thể sử dụng nextUntil() như thế này:

<tbody> 
    <tr class="parent"> 
     <td>John</td> 
     <td>HR Admin</td> 
     <td>10/10/1980</td> 
     <td>Yes</td> 
     <td><a class="showaffiliated" href="#">Yes</a></td> 
    </tr> 
    <tr class="affiliated"> 
     <td colspan="2">Amanda</td> 
     <td colspan="3">20/20/1985</td> 
    </tr> 
    <tr class="affiliated"> 
     <td colspan="2">Louis</td> 
     <td colspan="3">20/10/2010</td> 
    </tr> 
</tbody> 
$("tr.affiliated").hide(); 

$("a.showaffiliated").click(function() { 
    var $affiliated = $(this).closest(".parent").nextUntil(".parent"); 
    $affiliated.toggle(); 
    var affiliatednumber = $affiliated.length; 
}); 

Example fiddle

+1

Đẹp - Tôi thậm chí không biết về phương thức nextUntil(). Tìm hiểu điều gì đó mới hàng ngày :) – Syon

+1

Mặc dù câu trả lời là chính xác, 'nextUntil()' là một phương pháp rất kém hiệu quả ([link] (http://api.jquery.com/nextUntil/#comment-29884718)). Một giải pháp tốt hơn là nhóm các subrows thành 'tbody' và chuyển đổi nó. –

+0

cảm ơn cho giải pháp, có thể thêm một lớp, mặc dù các giải pháp khác không cần một. Cảm ơn sự giúp đỡ, đánh giá cao nó! – user1901096

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