我已经在这个问题上苦苦挣扎了几个小时,却不了解我的行为。我没有在其他任何文章中找到此问题(尽管我发现许多与.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)上正确迭代。

我不明白为什么。

最佳答案

尝试这个:

$('#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/

09-25 18:51