我一直在努力解决这个问题几个小时,却没有理解我的行为。我没有在任何其他帖子上找到此问题(尽管我发现许多与.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
)。
我不明白为什么。
答案 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(''); }
});
的小提琴
答案 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);
})
})