2014-12-18 46 views
0

我有一個表,每行有+30(一個月的每天一個)行和輸入字段start_km []和end_km []也有類start_km和end_km分別。jquery prev()tr其中值不爲空

基本上我需要做的是當進入start_km時,例如說第四行需要獲得第三行的end_km值來測試它們是否相同。現在很容易做到:

$(this).parent().parent('tr').prev('tr').find('.end_km').val(); 

我的問題是,第三行可能是空的,所以我需要去第二行。我知道我可以做到這一點:

$(this).parent().parent('tr').prev('tr').prev('tr').find('.end_km').val(); 

現在,我敢肯定,你可以看到我的問題,我的項目可以是在第30行中的最後一項可以在第4行,這樣的配發,如果公司和的分組()。

有沒有更快或更乾淨的方法來做到這一點?

感謝您對此的意見。

+1

的可能重複(HTTP://計算器.COM /問題/ 4921247 /製作-jquerys-分組,分組,分組-findselector通話,更容易) – showdev

回答

2

您應該檢查prevAll().eq(x)方法組合

這使得有可能選擇一個等於關於x位置的「原始」元素

prevAll().eq(0) = prev() 
prevAll().eq(1) = prev().prev() 
prevAll().eq(2) = prev().prev().prev() 
... 

檢查Demo here

0

上一個元素我爲你創建了一個函數。你只需要將它添加到你的文件中並調用它。在這裏如何去:

$.fn.firstPrevMatch = function(match){ 
    var $prev = this.prev(); //Get the prev element 
    if($prev.length){//Check if it exist 
     var $match = $prev.filter(match); //If it does, compare it to your match 
     if($match.length) return $match.first(); //If it match, return the first element 
     else return $prev.firstPrevMatch(match); //Else, recall the function with the previous elememnt 
    }else{ 
     return this.not('*'); //First-child, return empty object 
    } 
} 

一旦它被包括在內,你將能夠使用它像:

$(this).closest('tr').firstPrevMatch(function(){ 
    return $(this).find('.end_km').val(); 
}).find('.end_km').val(); 

Here's a live example

0

謝謝你們的快速反應,無論你的答案給了我我需要的東西。

我落得這樣做:[。製作jQuery的.prev()上一個()上一個()找到( 「選擇」)調用更簡單。]

for (i = 0; i <= 30; i++) { 
ekl = $(this).parent().parent('tr').prevAll('tr').eq(i).find('.end_km').val(); 
    if (ekl != '') { 
    alert(ekl); 
    break 
    }   
}