DeLe
DeLe

Reputation: 2480

Jquery - Get previous value row in table

i have dynamic simple table like:
enter image description here

I try to get previous value cell when i click edit button.

Example: when i click first edit button that will alert('a1')
when i click second edit button that will alert('a2')

i try with

$('.edit').click(function(){
        alert($(this).parents('tr').prev().children().eq(1).text());
});

it's working well with first edit button because previous row that has one row.
And it't not working with second edit button.

How can i do it (by dynamic previous row) http://jsfiddle.net/bWjbj/

ps: i'm working with next row with

alert($(this).parents('tr').nextAll(':eq(' + ($(this).parent().siblings().eq(0).attr("rowspan")-1) + ')').children().eq(1).text());

Upvotes: 3

Views: 5483

Answers (1)

Blazemonger
Blazemonger

Reputation: 92913

http://jsfiddle.net/mblase75/XGdkD/

The problem is that for the second Edit button, the previous table row isn't the row you want -- you want the row two more before that, because that's where the rowspans begin.

Or, to be general: you want the table row belonging to the previous Edit button. In the case of the first edit button, though, you just want the previous row.

So, in code:

$('.edit').click(function () {
    var idx = $('.edit').index(this); // which Edit button is this?
    if (idx > 0) { // first button
        var $tr = $('.edit').eq(idx-1).closest('tr'); // previous row
    } else { // not first button
        var $tr = $(this).closest('tr').prev('tr'); // previous Edit button's row
    }
    var $td = $tr.find('td:nth-child(2)'); // second <td> of the row
    alert($td.text());
});

Compact version of the same code:

$('.edit').click(function () {
    var idx = $('.edit').index(this),
        $tr = (idx) ? $('.edit').eq(idx-1).closest('tr') : $(this).closest('tr').prev('tr'),
        $td = $tr.find('td:nth-child(2)');
    alert($td.text());
});

Upvotes: 4

Related Questions