11
回答
请问兄弟们,这段JS代码出现了什么问题?为什么打印不了数据?
利用AWS快速构建适用于生产的无服务器应用程序,免费试用12个月>>>   
<script type="text/javascript" >
      var getTd=document.getElementById("myTable");
          rowsLength=getTd.rows.length;
      var theDate ;
    for(var i=1;i<rowsLength;i++)
    {
	   var std=getTd.rows[i].cells[2].innerText;
	   var stdVlue=std.replace(/天/gi,'');
	    stdVlue=Number(stdVlue);
	//getTd.rows[i].cells[11].innerText=stdVlue;
	      for(var g=rowsLength;g>=2;g--)
	    {
	        var std2=getTd.rows[g].cells[11].innerText;
	        var stdVlue2=std2.replace(/天/gi,'');
	        stdVlue2=Number(stdVlue2);
	        theDate=stdVlue2+stdVlue;
	    }
   	    getTd.rows[i].cells[11].innerText=stdVlue;
        document.write(stdVlue);
        document.write("<br/>");
        document.write(theDate);
        document.write("<br/>");

    }
</script>
举报
诸葛非卿
发帖于5年前 11回/376阅
共有11个答案 最后回答: 5年前

变量定义不规范(不过应该不是bug的原因)

var getTd=document.getElementById("myTable");
	          rowsLength=getTd.rows.length;

var stdVlue2=std2.replace(/天/gi,'');
	            stdVlue2=Number(stdVlue2);
	            theDate=stdVlue2+stdVlue;
要么每行都加上 var关键字,要么定义结尾用逗号


--- 共有 1 条评论 ---
诸葛非卿但是问题是,这段代码可以获取相关的数据,但是就是不能累加。要不打印出来的是NaN是什么原因呢? 5年前 回复
<script type="text/javascript" >
      var getTd=document.getElementById("myTable");
      var rowsLength=getTd.rows.length;
      var theDate ;
    for(var i=1;i<rowsLength;i++)
    {
	   var std=getTd.rows[i].cells[2].innerText;
	   var stdVlue=std.replace(/天/gi,'');
	    stdVlue=Number(stdVlue);
	//getTd.rows[i].cells[11].innerText=stdVlue;
	    //  for(var g=rowsLength;g>=2;g--)
	   // {
	        var std2=getTd.rows[i].cells[11].innerText;
	        var stdVlue2=std2.replace(/天/gi,'');
	        stdVlue2=Number(stdVlue2);
	        theDate=stdVlue2+stdVlue;
	//    }
   	    getTd.rows[i].cells[11].innerText=stdVlue;
        document.write(stdVlue);
        document.write("<br/>");
        document.write(theDate);
        document.write("<br/>");

    }
</script>                
同样的一段代码,我只是修改其中的for(var g=rowsLength;g>=2;g--),就能显示获取到的值。

你出什么错??

for(var g=rowsLength;g>=2;g--)

      {


          var std2=getTd.rows[g].cells[11].innerText;
g从rowsLength开始,你取row[g],下标越界了肯定报错。。。

像你说的报了个NAN,那你的代码连这里都没执行到,,在这里stdVlue=Number(stdVlue)转型的时候就出错了。。你传的值就是一个不能转换为数字的值。。


--- 共有 1 条评论 ---
诸葛非卿问题是现在没有值了。 5年前 回复

引用来自“秋雨梧桐”的答案

你出什么错??

for(var g=rowsLength;g>=2;g--)

      {


          var std2=getTd.rows[g].cells[11].innerText;
g从rowsLength开始,你取row[g],下标越界了肯定报错。。。

像你说的报了个NAN,那你的代码连这里都没执行到,,在这里stdVlue=Number(stdVlue)转型的时候就出错了。。你传的值就是一个不能转换为数字的值。。


我修改了代码,希望从后面向上逐渐累加。

<script type="text/javascript">
var gTd=document.getElementById("myTable");
var tableRowsLength=Number(gTd.rows.length);
var tableValue;
for(var i=tableRowsLength+1;i>=1;i--)
{
   var gTdValue=gTd.rows[i].cells[2].innerText;
  
   var nAnRe=Number(gTdValue.replace(/天/,""));
 
   gTd.rows[i].cells[11].innerText=nAnRe;
   
   for(var g=tableRowsLength;g>2;g--)
   {
	 var gTdOldValue=gTd.rows[g].cells[2].innerText;
         var nAnReOld=Number(gTdOldValue.replace(/天/,""));
	 
	 gTd.rows[i].cells[11].innerText=nAnReOld+nAnRe; //对相应的列赋值
	  
	}
  
}
document.write(tableRowsLength);

</script

有的浏览器会碰到script语句块执行顺序的问题,你最好把这个script的代码都写到函数里,在<body onload="YourFunction()">进行调用来解决。    
--- 共有 3 条评论 ---
诸葛非卿是的,我的本意确实是这样,你说的那个顾虑应该是没有的,因为我获取到的值仅仅只是数字+“天”这个汉字而已,我只需要过滤掉汉字就可以了。但是问题是,就算没有出现溢出,我只是从后往前赋值好像也不能成功。下面我发一段代码过来! 5年前 回复
放倒回复 @诸葛非卿 : theDate=stdVlue2+stdVlue; 你的本意是不是 theDate+=stdVlue2+stdVlue; 还有在Number()转换时,如果是'123s'将会转出NaN,用parseInt来转换数据. 5年前 回复
诸葛非卿没有办法了,目前这页面是没有body控件,只有一个表格数据 5年前 回复
<script type="text/javascript">
var gTd=document.getElementById("mytable");
var rowsLength=gTd.rows.length;
/*for (var h=1;h<rowsLength+1;h++)
{   
   var getTheValue=gTd.rows[h].cells[2].innerText;
   var NuNvalue=Number(getTheValue.replace(/天/,""));
    gTd.rows[h].cells[11].innerText=NuNvalue; //赋值给单元列*/
   for(var g=rowsLength;g>=2;g--)
   {
     var getEndValue=gTd.rows[g].cells[11].innerText;
	 var getStartValue=gTd.rows[g].cells[11].innerText;
	 var NuNvalueS=Number(getStartValue.replace(/天/,""));
	 var NuNvalueD=Number(getEndValue.replace(/天/,""));
	 var theTrueValue=NuNvalueS+NuNvalueD;
	 gTd.rows[g].cells[11].innerText=theTrueValue;
	 document.write(NuNvalueD);
	 document.write("<br/>");
  
   }
//}
</script>
看不到值,原因是什么呢?我现在人感冒,脑袋糊涂很
--- 共有 3 条评论 ---
诸葛非卿修改了之后,数据变成了所有的数据最后都只是加上第一行的值。烦死了,为什么出现这个问题呢? for(var g=rowsLength-1;g>=2;g--) { var std2=getTd.rows[g].cells[11].innerText; 5年前 回复
放倒对了,你的边界总有问题,var g=rowsLength-1; 应该是这样才对,你这么取越界了。 5年前 回复
放倒用firebug调试吧,看着似乎没什么问题。 5年前 回复
var getTd=document.getElementById("myTable");
       var rowsLength=getTd.rows.length;
       var theDate ;
      for(var i=1;i<rowsLength;i++){
        var std=getTd.rows[i].cells[2].innerHTML;  var stdVlue=std.replace(/天/gi,'');
        stdVlue=Number(stdVlue);
     //getTd.rows[i].cells[11].innerText=stdVlue;
        for(var g=rowsLength-1;g>=2;g--){
     var std2=getTd.rows[g].cells[1].innerHTML;
         var stdVlue2=std2.replace(/天/gi,'');
         stdVlue2=Number(stdVlue2);
         theDate=stdVlue2+stdVlue;
        }
        getTd.rows[i].cells[1].innerHTML=stdVlue;
        document.write(stdVlue);
        document.write("<br/>");
        document.write(theDate);
        document.write("<br/>");
      }

 

我做了点修改

--- 共有 6 条评论 ---
诸葛非卿回复 @俏淑女雯雯 : 就是讲单元格中数据进行累加。 5年前 回复
俏淑女雯雯回复 @诸葛非卿 : 我不明白你的需求啊,只是简单的把代码调通了而已 5年前 回复
诸葛非卿回复 @俏淑女雯雯 : 目前还是没有达到目的。目前的问题是,获取到的数据相加之后和我想象的不一样啊。 5年前 回复
诸葛非卿回复 @俏淑女雯雯 : 我并没有直接用你上面的代码,我使用的是自己的代码。只是让照你上面说的进行了一些修改,目前感觉好一些了。。 5年前 回复
俏淑女雯雯回复 @诸葛非卿 : 我贴这个代码的时候不小心多了一行, <span style="color:#E53333;"></span> 把这个删掉 5年前 回复
顶部