jQuery .text()方法重复自己。如何让它只运行一次?

时间:2018-03-20 09:00:37

标签: javascript jquery html

<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)所需的其他数字在被添加到总和后被删除。并且基于下面的控制台,似乎这就是问题的原因。

enter image description here

enter image description here

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));
      }