2017-07-21 113 views
0

我有这样的代码:JavaScript警告for循环不工作

var txt = document.getElementsByClassName('rich-table-row'); 

document.getElementById("suma").onclick = function suma(){ 

    var calcule = 0; 

    for(var i = 1; i < txt.length; i++) { 

    calcule += Number(((txt[i].getElementsByClassName('rich-table-cell')[2].getElementsByTagName('span')[0].innerText).substring(2)).replace(',','')); 

    } 

alert('test'); 

}; 

后的循环结束,警报没有显示。我做错了什么? 谢谢

+2

你确定你的for循环正在执行,甚至是控制进入'suma'函数吗?你可以在输入函数suma时通过'console.log();'知道。 另请检查您的控制台。 –

+2

控制台中可能有一个javascript错误等着你。 – James

+1

什么都没有。检查您的浏览器控制台是否存在拼写错误...顺便说一下,数组基于零 –

回答

0

正如@詹姆斯提到的,如果您试图删除多个逗号,则需要使用定义为全局的正则表达式。但是,就像他所说的那样,这不应该阻止功能继续(仅导致calculeNaN)。

没有标记很难说出什么问题,但我怀疑是你的代码中有一个ReferenceError,这可能与你正在解析的标记有关(可能不会返回单元格或跨度)。

我重构了你的函数,包括改变你的电话replace()使用RegExp并添加了假定的标记;它按预期工作:

JS:

var rows = document.getElementsByClassName('rich-table-row'); 

document.getElementById('suma').onclick = function() { 
    var calcule = 0; 
    var cell, span, text; 

    for(var i = 1; i < rows.length; i++) { 
     cell = rows[i].getElementsByClassName('rich-table-cell')[2]; 
     span = cell.getElementsByTagName('span')[0]; 
     text = span.innerText.substring(2).replace(/[,]/g,''); 
     calcule += Number(text); 
    } 

    alert(calcule); 
}; 

HTML

<div class="rich-table"> 
    <div class="rich-table-row"> 
    <div class="rich-table-cell"></div> 
    <div class="rich-table-cell"></div> 
    <div class="rich-table-cell"> 
     <span>AB697,871,184</span> 
    </div> 
    </div> 
    <div class="rich-table-row"> 
    <div class="rich-table-cell"></div> 
    <div class="rich-table-cell"></div> 
    <div class="rich-table-cell"> 
     <span>AB697,871,185</span> 
    </div> 
    </div> 
</div> 

<button id="suma">SUMA</button> 
+0

我在控制台中得到这个:TypeError:txt [i] .getElementsByClassName(...)[2]未定义 – PickOne

+0

这意味着您的标记结构不支持您正在创建的JavaScript引用。 (也就是说,在至少一个“rich-table-row”引用中没有第三个“rich-table-cell”实例)。你能编辑你的文章以包含标记吗? –

0

我认为我管理如何解决这个问题?

因为从控制台上的错误,如果(typeof(txt [i] .getElementsByClassName('rich-table-cell')[2])!='undefined'),我插入了一个IF,如下所示:

我认为这个错误是因为在循环结束的某个地方,我弄不明白