jQuery - 在查找表的上一行中查找下一个数字

时间:2012-12-12 07:24:15

标签: jquery lookup-tables

这是对此处回答的问题的后续问题 - 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();
}

示例:因此,使用下表,如果数字为1(小于或小于5),且列为1(超过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>

感谢帮助/指示。

感谢。

-Stephen

更新:

我想出了一个解决方案。发布我的解决方案以防它可以帮助他人。

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");
    }
}

我确信这可能更有效率,但它确实有效。

0 个答案:

没有答案