.each()没有正确迭代

时间:2011-11-09 18:23:35

标签: jquery loops html-table jquery-selectors each

我一直在努力解决这个问题几个小时,却没有理解我的行为。我没有在任何其他帖子上找到此问题(尽管我发现许多与.each()方法相关)。

无论如何我在这里:

这是我要迭代的HTML:

<input type="text" id="investment" /><br />
<table id="fundTable">
        <tr> 
             <td class="rentability"> <span class="someClass"> 0.12 </span> </td>
             <td class="absoluteResult"></td>
        </tr>
        <tr> 
             <td class="rentability"> <span class="someClass"> 0.24  </span> </td>
             <td class="absoluteResult"></td>
        </tr>
        <tr>
            ...
</table>

这个想法是:用户将在textField #investment中输入一个值。 onChange,JQuery将通过将用户输入乘以.absoluteResult值来填充.rentability表列。

接下来是JQuery部分:

$('#investment').change(function() {
        var investment = $('#investment').val(),
            currentlyDisplayedRentability,
            updatedAbsoluteResult

        $('#fundTable tr').each(function(index, tableRow) {
            currentlyDisplayedRentability = $(tableRow + "span").html()
            currentlyDisplayedRentability = parseFloat(currentlyDisplayedRentability)
            updatedAbsoluteResult = currentlyDisplayedRentability * investment
            $(tableRow + "td[class=absoluteResult]").html(updatedAbsoluteResult)
        })
    })

使用.absoluteResult列的第一行的值填充所有.rentability行会发生什么。 所有乘法仅使用一个值。好像.each()正在一列(.absoluteResult)上正确迭代而不是另一列(.rentability)。

我不明白为什么。

3 个答案:

答案 0 :(得分:2)

我认为问题在于您使用选择器在每个表行中进行搜索的方式;而不是

$(tableRow + "span").html()

$(tableRow).find("span").html()

答案 1 :(得分:2)

这有效..

$('#investment').bind('keyup', function() {
var a = $(this).val();
if (!isNaN(parseFloat(a)) && isFinite(a)) {
    $('table tr').each(function() {
        var x = $(this).find('td.rentability .someClass').html();
        $(this).find('.absoluteResult').html(x * a);
    });
}
else { $('.absoluteResult').html(''); }
});

这是检查http://jsfiddle.net/BcjMj/

的小提琴

答案 2 :(得分:1)

试试这个:

$('#investment').change(function() {
        var investment = parseFloat($('#investment').val());

        $('table tr').each(function() {
            var $tr = $(this);
            var rentability = parseFloat($tr.find('.someClass').text());

            $tr.find('.absoluteResult').html(investment * rentability);
        })
    })

代码:http://jsfiddle.net/qYSAH/1/