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