Jquery prev()tr其中value不为空

时间:2014-12-18 20:25:24

标签: jquery

我的表中有一个+ - 30(每月每天一个)的行和输入字段start_km []和end_km [],每行也分别有类start_km和end_km。

基本上我需要做的是当输入start_km时,例如在第4行,它需要在第3行获取end_km的值以测试它们是否相同。现在,这很容易完成:

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

我的问题是第3行可能为空,所以我需要转到第2行。我知道我可以用:

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

现在我确定你可以看到我的问题,我的输入可以在第30行,最后一个条目可以在第4行,所以分配if和prev()。

有更快或更清洁的方法吗?

感谢您对此的意见。

3 个答案:

答案 0 :(得分:2)

您应该检查prevAll().eq(x)方法组合

这使得可以选择前一个元素,该元素等于与原始'相关的x位置。元件

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

检查Demo here

答案 1 :(得分: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

答案 2 :(得分:0)

感谢大家的快速反应,你的答案都给了我我需要的东西。

我最终这样做了:

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