我的表中有一个+ - 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()。
有更快或更清洁的方法吗?
感谢您对此的意见。
答案 0 :(得分:2)
您应该检查prevAll().eq(x)
方法组合
这使得可以选择前一个元素,该元素等于与原始'相关的x位置。元件
prevAll().eq(0) = prev()
prevAll().eq(1) = prev().prev()
prevAll().eq(2) = prev().prev().prev()
...
答案 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();
答案 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
}
}