2012-11-23 33 views
0

我有一个jQuery问题,我可以使用一些帮助。我试图根据表中的值确定一个值。基于输入和查找表查找值

这里的情景:

  1. 一个类别选择。这决定了要使用的列。下面是 该代码:

    var column; 
    
    if($('input:radio[name=arc2-1]:checked').val() == 0 && $('input:radio[name=arc2-2]:checked').val() == 0) { 
    column = 2; 
    }else if($('input:radio[name=arc2-1]:checked').val() == 0 && $('input:radio[name=arc2-2]:checked').val() == 1) { 
    column = 3; 
    }else if($('input:radio[name=arc2-1]:checked').val() == 1 && $('input:radio[name=arc2-2]:checked').val() == 0) { 
    column = 4; 
    }else if($('input:radio[name=arc2-1]:checked').val() == 1 && $('input:radio[name=arc2-2]:checked').val() == 1) { 
    column = 5; 
    }else if($('input:radio[name=arc2-1]:checked').val() == 2 && $('input:radio[name=arc2-2]:checked').val() == 1) { 
    column = 6; 
    }else if($('input:radio[name=arc2-1]:checked').val() == 3 && $('input:radio[name=arc2-2]:checked').val() == 1) { 
    column = 7; 
    } 
    
  2. 有一个在看起来像这样的HTML隐藏表:

    <table id="ms25"> 
        <tr> 
         <td>65</td> 
         <td>5.4</td> 
         <td>5.4</td> 
         <td>3.1</td> 
         <td>3.1</td> 
         <td>3.0</td> 
         <td>-</td> 
        </tr> 
        <tr> 
         <td>55</td> 
         <td>4.6</td> 
         <td>4.6</td> 
         <td>2.7</td> 
         <td>2.7</td> 
         <td>2.5</td> 
         <td>-</td> 
        </tr> 
        <tr> 
         <td>45</td> 
         <td>3.8</td> 
         <td>3.8</td> 
         <td>2.2</td> 
         <td>2.2</td> 
         <td>2.0</td> 
         <td>-</td> 
        </tr> 
        <tr> 
         <td>35</td> 
         <td>2.9</td> 
         <td>2.9</td> 
         <td>1.7</td> 
         <td>1.7</td> 
         <td>1.5</td> 
         <td>8.1</td> 
        </tr> 
    </table> 
    

表中的值不会改变。总会有7列和11行(我缩短了这个例子)。

  1. 这是棘手的部分。在输入 字段中输入一个数字(65或更少)。然后:

  2. 将输入数字与第一个表格列进行核对。输入的数字被“舍入”到列中上一个最接近的数字。

  3. 的号码找到从步骤1中的一个和步骤4

例如,如果列是4,输入的号码是31,你会去的第一列,找到下一个最接近的数字“向上取整”(35),然后再转到第4列......找到的数字是1.7

我发现,涉及的解决方案(如本:jQuery find same td in prev. and next row)的点点滴滴,但我不能确定如何把它放在一起。

任何关于解决方案或寻找的解决方案的帮助/指导将不胜感激。

+0

你有没有想过在页面加载通过表迭代并保存一切都变成一个jQuery对象。这样,您不必每次都浏览DOM,而且使用起来更快,更方便。所以你会得到这样的结果:'{65:[5.4,5.4,3.1],55:[4.6,4.6,4.6]}' – Andy

回答

1

你可以这样说:

function get_table_value(column, value) { 
    table = $('#ms25'); 
    smallestdiff = Number.MAX_VALUE; 
    savedindex = 0; 
    table.find('td:first-child').each(function(i) { 
     diff = parseInt($(this).text(),10) - parseInt(value, 10); 
     if (diff > 0 && diff < smallestdiff) { 
      smallestdiff = diff; 
      savedindex = i; 
     } 
    }); 
    tr = table.find('tr:eq('+savedindex+')'); 
    alert (tr.find('td:first-child').text()); //alerts 35 
    alert (tr.find('td:nth-child('+column+')').text()); //alerts 1.7 
} 

见工作demo

+0

尼尔森,这工作完美!一旦我逐行阅读代码,它终于对我有意义。再次,谢谢。 – user282648