<tr class="<%= payment_paid(f.paid)%>" id="paidrow">
<td>
<% if !f.paid %>
<%= check_box_tag "pin_number[]", f.id, checked= !f.paid? %>
<%end%>
</td>
<td class="pin"><%= f.year %></td>
<td class="val"><%= f.quarter %></td>
<td align="right" class="price"><%= number_to_currency(f.amount, unit: "", precision: 2)%></td>
<script>
mergecommonrows();
setTimeout(addpaidrows,1000);
</script>
</tr>
function addpaidrows(){
$(document).ready(function(){
var table = $("#property_dtl_table_body");
var rows = table.find("tr#paidrow.payment_paid");
var first = parseFloat(rows.find('.price').text());
sum = first;
var startIndex = 0;
var lastIndex = 0;
var startText = rows.find('.price').text();
var colsLength = 4;
var removeLater = new Array();
for(var i=3; i<colsLength; i++){
for(var j=1; j<rows.length; j++){
var cRow =$(rows[j]);
var cCol = $(cRow.find('.price'));
var currentText = cCol.text();
var currentNumber = parseFloat(cRow.find('.price').text());
cCol.css("background","#c8fcc1");
console.log(cCol);
removeLater.push(cCol);
lastIndex=j;
var spanLength = lastIndex-startIndex;
if(spanLength>=1){
console.log(lastIndex+" - "+startIndex)
//console.log($($(rows[startIndex]).find('.price')))
$($(rows[startIndex]).find('.price')[i]).attr("rowspan",spanLength+1);
}
lastIndex = j;
startIndex = j;
startText = currentText;
var spanLength = lastIndex-startIndex;
if(spanLength>=1){
console.log(lastIndex+" - "+startIndex)
//console.log($($(rows[startIndex]).find("td")[i]))
$($(rows[startIndex]).find('.price')[i]).attr("rowspan",spanLength+1);
}
console.log("---");
sum = sum + currentNumber;
}
}
console.log(sum);
var frist = rows.find('.price').text();
for(var i in removeLater){
$(removeLater[i]).remove();
}
$('tr#paidrow.payment_paid td.price').text(sum.toFixed(2))
});
}
我正在编写一个程序,在Javascript文件执行完之后,表格右上角的文本将被替换为&quot; sum.toFixed(2)&#39;变量(在这种情况下,67.97)。它有效,但问题是.text()方法重复自身,导致结果变为NaN,因为sum.toFixed(2)所需的其他数字在被添加到总和后被删除。并且基于下面的控制台,似乎这就是问题的原因。
答案 0 :(得分:1)
不幸的是,与其他jQuery方法相比,text
略显不寻常。来自the documentation:
获取匹配元素集合中每个元素的组合文本内容,包括它们的后代,或者设置匹配元素的文本内容。
jQuery中的几乎所有其他访问器函数都只访问匹配元素的第一个,但text
组合了所有文本。
如果您只想要第一个匹配项目的文字,则必须故意这样做:
var first = parseFloat(rows.find('.price').first().text());
// ---------------------------------------^^^^^^^^
答案 1 :(得分:0)
我解决了这个问题。我添加了一个if-else语句,用于检查总和是否为NaN(不是数字)。如果是NaN,则不显示输出。但如果不是,输出将显示。
if (sum != sum){
}
else {
rows.find('.price').first().text(sum.toFixed(2));
}