这是此处回答的问题的后续问题 - jQuery - Find Value Based on Input and Lookup Table。
该解决方案非常有效。不过有一个悬而未决的问题。
查找表包含破折号,我需要数字进行后续计算。所以我想要做的是(1)找到正确的td之后,(2)我想确认它是一个数字,(3)如果是,使用它,(4)如果不是,去同一列中的前几行,直到找到一个数字。(5) 如果找到,停止检查。(6) 如果没有找到号码,我会显示一条消息。
这是我已经走了多远:
jQuery.fn.reverse = [].reverse;
function GetTableValue(column, value, table) {
var smallestdiff = 0;
var savedindex = 0;
$(table).find('td:first-child').reverse().each(function(i) {
diff = parseFloat($(this).text(),10) - value;
if (diff >= smallestdiff) {
smallestdiff = diff;
savedindex = 12 - i;
return false;
}
});
tr = $(table).find('tr:eq('+ savedindex +')');
$(".scc-round").val( tr.find('td:first-child').text() );
var cell_value = tr.find('td:nth-child('+ column +')').text();
if( isNaN(cell_value) ) {
savedindex = savedindex - 1;
}
// this is as far as I've gotten
new_ie_value = tr.find('td:nth-child('+ column +')').text();
}
示例:所以使用下表,如果数字是一(等于或小于 5),并且列是一(超过 1 列),我会得到“-”。我想上升到下一个数字,即“0.6”。
我的方法是从行的值中减去(savedindex)并向上遍历,但我不确定如何编写它。此外,我结束了我确信可以简化的大量编码。
示例表:
<table id="ms25">
<tr>
<td>20</td>
<td>-</td>
<td>-</td>
<td>-</td>
<td>-</td>
<td>-</td>
<td>4.6</td>
</tr>
<tr>
<td>15</td>
<td>1.2</td>
<td>1.2</td>
<td>0.8</td>
<td>0.8</td>
<td>0.6</td>
<td>3.5</td>
</tr>
<tr>
<td>10</td>
<td>0.8</td>
<td>0.8</td>
<td>0.5</td>
<td>0.5</td>
<td>0.4</td>
<td>2.3</td>
</tr>
<tr>
<td>7.5</td>
<td>0.6</td>
<td>0.6</td>
<td>0.4</td>
<td>0.4</td>
<td>0.3</td>
<td>1.8</td>
</tr>
<tr>
<td>5</td>
<td>-</td>
<td>-</td>
<td>-</td>
<td>-</td>
<td>-</td>
<td>1.2</td>
</tr>
</table>
帮助/方向将不胜感激。
谢谢。
-斯蒂芬
更新:
我想出了一个解决方案。发布我的解决方案以防万一它可以帮助其他人。
function GetTableValue(column, value, table) {
smallestdiff = Number.MAX_VALUE;
var 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 +')');
$(".scc-round").val( tr.find('td:first-child').text() );
new_ie_value = tr.find('td:nth-child('+ column +')').text();
// only a few are not numbers, so i'll do a quick check
if(isNaN(parseFloat(new_ie_value, 10))) {
$(table).find('tr').each(function(i){
if(isNaN(parseFloat(new_ie_value, 10))) {
savedindex = savedindex - 1;
}
tr = $(table).find('tr:eq('+ savedindex +')');
$(".scc-round").val( tr.find('td:first-child').text() );
new_ie_value = tr.find('td:nth-child('+ column +')').text();
});
}
// it's possible that the top td is still not a number
if(isNaN(parseFloat(new_ie_value, 10))) {
$(".scc-round").val("call");
}
}
我相信这可能会更有效,但它确实有效。